2012-04-25 40 views

回答

15

是的,您可以使用* mmintrin.h頭文件中的內在函數(emmintrin.h,xmmintrin.h等,具體取決於您要使用的SSE級別)。出於多種原因,這通常比使用匯編器更可取。

#include <emmintrin.h> 

int main(void) 
{ 
    __m128i a = _mm_set_epi32(4, 3, 2, 1); 
    __m128i b = _mm_set_epi32(7, 6, 5, 4); 
    __m128i c = _mm_add_epi32(a, b); 

    // ... 

    return 0; 
} 

請注意,這種方法適用於各種平臺上的大多數x86和x86-64編譯器,例如, gcc,clang和英特爾在Linux/Mac OS X/Windows上的ICC,甚至微軟的Visual C/C++(當然,只有Windows)。

+0

這是用於gcc還是VC++? – pythonic 2012-04-25 07:07:23

+4

gcc和VC++都支持內在函數。 – 2012-04-25 07:29:37

+0

FTW,icc也支持這些內在函數 – hroptatyr 2012-04-25 07:30:12

4

找到gcc包含的*intrin.h標題(這裏是/usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/include/)。

也許值得注意的是,標頭immintrin.h根據您允許的功能(例如使用-msse2-mavx)包含所有其他固有。

4

你想要的是intrinsics,它看起來像庫函數,但實際上內置於編譯器中,因此它們被轉換成特定的機器代碼。

Paul R和hroptatyr描述了在哪裏可以找到GCC的文檔。 Microsoft also has good documentation on the intrinsics in their compiler;即使你使用GCC,你也可能會發現MS對這個想法的描述是一個更好的教程。

+0

ARM體系結構如何?它支持NEON SIMD嗎?或者這隻適用於x86? – enthusiasticgeek 2013-05-28 20:30:17

+1

@enthusiasticgeek問題指定x86-64。 ARM和NEON有自己的編譯器和自己的內在函數。 – Crashworks 2013-06-03 05:23:24