'Programming/mmx & simd'에 해당되는 글 2건

  1. 2012.10.12 mmx, sse intrinsics from MSDN.NET
  2. 2012.10.09 sse / mmx 확장
Programming/mmx & simd2012. 10. 12. 14:29
함수들 뒤지다 보니 MSDN 문서의 함수와 GCC의 함수들이 동일한것 발견.
도움이 될 듯 하니 일단 복사복사~

[링크 : http://msdn.microsoft.com/en-us/library/y0dh78ez(v=vs.80).aspx]



아무튼 요즘 신형 CPU들이야 SSE2를 넘어서 SSE3에 AVX(샌디부터)까지 지원하니
부동소수점 안되는 MMX를 할 필요도 없고
정수가 안되는 SSE를 쓸 필요도 없고
SSE2 이상 쓰세요~ 라는 기분의 비교표


[링크 : http://msdn.microsoft.com/en-US/library/esaffkes(v=vs.80).aspx



[링크 : http://msdn.microsoft.com/en-US/library/y08s279d(v=vs.80).aspx] 함수 이름 규칙


명령어를 비교해도 딱히 이게 SSE다 MMX다 라고 잘라말하기는 힘들다.
접미(suffix)를 보고 대충 짐작은 가지만 그렇다고 해서 확실한건 아니니..
[링크 : http://msdn.microsoft.com/en-us/library/ccky3awe(v=vs.80).aspx ] MMX 명령어
[링크 : http://msdn.microsoft.com/en-us/library/t467de55(v=vs.80).aspx] SSE 명령어

'Programming > mmx & simd' 카테고리의 다른 글

sse / mmx 확장  (0) 2012.10.09
Posted by 구차니
Programming/mmx & simd2012. 10. 9. 11:08
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__ 등의 변수명을 지원하기도 한다.

/* 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
Posted by 구차니