xmmintrin.h与gcc向量扩展

xmmintrin.h与gcc向量扩展,gcc,sse,simd,Gcc,Sse,Simd,我应该选择哪种方法来编写SIMD指令 mm*方法form*mmintrin.h似乎更易于跨编译器移植 但gcc似乎产生了大量更简单的代码,并支持更多的体系结构 那么哪种方法是最好的?如果使用gcc向量扩展,您将只能使用SSE功能的有限子集,因为有许多SSE内部函数不适合gcc之类的通用向量模型。如果您只想做相当基本的事情,例如向量上的浮点运算,那么您可能会侥幸成功,但是如果您对利用SIMD获得最大性能优势感兴趣,那么您需要使用本机内部函数。从*mmintrin.h文件中获得的内部函数仅在SSE机

我应该选择哪种方法来编写SIMD指令

mm*方法form*mmintrin.h似乎更易于跨编译器移植

但gcc似乎产生了大量更简单的代码,并支持更多的体系结构


那么哪种方法是最好的?

如果使用gcc向量扩展,您将只能使用SSE功能的有限子集,因为有许多SSE内部函数不适合gcc之类的通用向量模型。如果您只想做相当基本的事情,例如向量上的浮点运算,那么您可能会侥幸成功,但是如果您对利用SIMD获得最大性能优势感兴趣,那么您需要使用本机内部函数。

从*mmintrin.h文件中获得的内部函数仅在SSE机器上可用,但它们可以在不同的编译器中使用。GCC向量扩展更有限,但在更广泛的平台上实现,而且显然是特定于GCC的


与所有事情一样,没有“最佳”答案;你必须选择一个适合你需要的。

两者都可以使用。我就是这么做的。向量扩展涵盖了大多数垂直操作,这是您应该经常使用的。当您需要其他操作时,您可以强制转换。例如,如果您有一个16字节的向量
x
,则可以执行
\u mm\u movemask\u epi8((\u m128i)x)