2011-05-03 82 views
4

我应该选择哪种方法编写SIMD指令?xmmintrin.h vs gcc向量扩展

mm *方法形式* mmintrin.h在编译器中似乎更具可移植性。

但gcc vector extensions似乎产生更简单的代码,并支持更多的体系结构。

那么哪种方法最好?

+0

您可以同时使用两者。我就是做这个的。矢量扩展涵盖了大多数垂直操作,这是大部分时间应该使用的操作。当你需要其他操作时你可以施放。例如,如果你有一个16字节的矢量'x',你可以执行'_mm_movemask_epi8((__ m128i)x)'。 – 2018-01-17 14:07:48

回答

4

如果您使用gcc向量扩展,您将只能使用SSE功能的有限子集,因为有许多SSE内在函数不适合通用向量模型(如gcc's)。如果你只想做相当基本的东西,例如向量上的浮点运算,那么你可能会忽略它,但是如果你有兴趣利用SIMD来获得最大的性能好处,那么你需要使用本地内在函数。

2

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

和所有一样,没有“最好”的答案;你将不得不选择一个适合你的需求。