2012-04-25 42 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