SSE2用于GCC的双重计算

时间:2011-11-14 17:58:46

标签: optimization gcc double sse2

如何在GCC中使用SSE2? 我想使用双值。

我搜索s.th.像这样: http://vrm-vrm.blogspot.com/2009/10/gcc-intrinsics.html 仅用于双倍值。

1 个答案:

答案 0 :(得分:4)

如果您想使用SSE2 double insn,则必须使用gcc -mfpmath=sse -msse2进行编译。

单独选项-msse2将允许您使用SSE2内在函数,-mfpmath=sse将导致GCC为所有FP操作发出SSE2 insn。

另请注意,-O3启用了矢量化。

矢量化SSE2-4 insn的优点是显而易见的,Sandy Bridge处理器每个周期最多可以执行三次256位操作(例如4次双倍乘法,4次双重加法和一些随机播放)

然而,英特尔优化手册建议使用SSE进行标量操作,原因包括平面寄存器模型和较短的延迟,与传统的x87 insn相比。

修改

忘记提及,对于32位代码,您还可以添加-msseregparm,这将导致FP参数和返回值通过SSE寄存器传递。默认情况下,它们分别在内存和%st0中传递。当然,这会改变ABI,因此必须使用此选项编译所有交互模块。