openMP / CUDA 책을 보다보니 MMX 확장명령을 많이 쓰길래
어떤 컴파일러에서 어떤 변수 타입으로 지원하나 조사..
[링크 : http://stackoverflow.com/questions/661338/sse-sse2-and-sse3-for-gnu-c]
[링크 : http://software.intel.com/sites/default/files/m/9/4/c/8/e/18072-347603.pdf]
[링크 : http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html]
[링크 : http://gcc.gnu.org/onlinedocs/gcc-4.0.4/gcc/i386-and-x86_002d64-Options.html]
[링크 : http://gcc.gnu.org/onlinedocs/gcc-3.1/gcc/X86-Built-in-Functions.html]
[링크 : http://www.cs.fsu.edu/~xyuan/cis4930-cda5125/lect4_simd_sse.pptx]
---
ubuntu 10.04 LTS gcc의 경우
/usr/lib/gcc/i486-linux-gnu/4.x/include 경로에 ?mmintrin.h 라는 파일명으로 헤더가 존재한다.
(/usr/lib/gcc/i486-linux-gnu/4.6/include 우분투 12.04 에서는 4.6으로 나옴)
gcc 컴파일시 --mmmx -msse 등의 옵션을 주어야 하는듯 하다.
변수명은 intel 문서에서 처럼 __m64 도 지원하지만
__v2si__
__v4hi__
__v8qi__
__v2sf__ 등의 변수명을 지원하기도 한다.
---
$ cat temp.c
어떤 컴파일러에서 어떤 변수 타입으로 지원하나 조사..
[링크 : http://stackoverflow.com/questions/661338/sse-sse2-and-sse3-for-gnu-c]
[링크 : http://software.intel.com/sites/default/files/m/9/4/c/8/e/18072-347603.pdf]
[링크 : http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html]
[링크 : http://gcc.gnu.org/onlinedocs/gcc-4.0.4/gcc/i386-and-x86_002d64-Options.html]
[링크 : http://gcc.gnu.org/onlinedocs/gcc-3.1/gcc/X86-Built-in-Functions.html]
[링크 : http://www.cs.fsu.edu/~xyuan/cis4930-cda5125/lect4_simd_sse.pptx]
---
ubuntu 10.04 LTS gcc의 경우
/usr/lib/gcc/i486-linux-gnu/4.x/include 경로에 ?mmintrin.h 라는 파일명으로 헤더가 존재한다.
(/usr/lib/gcc/i486-linux-gnu/4.6/include 우분투 12.04 에서는 4.6으로 나옴)
gcc 컴파일시 --mmmx -msse 등의 옵션을 주어야 하는듯 하다.
변수명은 intel 문서에서 처럼 __m64 도 지원하지만
__v2si__
__v4hi__
__v8qi__
__v2sf__ 등의 변수명을 지원하기도 한다.
/* The Intel API is flexible enough that we must allow aliasing with other vector types, and their scalar components. */ typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__)); /* Internal data types for implementing the intrinsics. */ typedef int __v2si __attribute__ ((__vector_size__ (8))); typedef short __v4hi __attribute__ ((__vector_size__ (8))); typedef char __v8qi __attribute__ ((__vector_size__ (8))); typedef long long __v1di __attribute__ ((__vector_size__ (8))); typedef float __v2sf __attribute__ ((__vector_size__ (8)));
---
$ cat temp.c
#include <stdio.h>
#include <mmintrin.h>
void main()
{
__m64 m64val;
}
|
$ gcc temp.c
In file included from temp.c:2:
/usr/lib/gcc/i486-linux-gnu/4.4.3/include/mmintrin.h:32:3: error: #error "MMX instruction set not enabled"
temp.c: In function ‘main’:
temp.c:6: error: ‘__m64’ undeclared (first use in this function)
temp.c:6: error: (Each undeclared identifier is reported only once
temp.c:6: error: for each function it appears in.)
temp.c:6: error: expected ‘;’ before ‘m64val’
$ gcc -mmmx temp.c 'Programming > mmx & simd' 카테고리의 다른 글
mmx, sse intrinsics from MSDN.NET (0) | 2012.10.12 |
---|