Optimization SSE2用于GCC的双重计算

Optimization SSE2用于GCC的双重计算,optimization,gcc,double,sse2,Optimization,Gcc,Double,Sse2,如何在GCC中使用SSE2? 我想用双重价值观工作 我搜索s.th。这样地: 仅适用于双值。如果要使用SSE2doubleinsns,必须使用gcc-mfpmath=sse-msse2进行编译 选项-msse2将允许您单独使用SSE2内部函数,-mfpmath=sse将导致GCC为所有FP操作发出SSE2 INSN 还请注意,矢量化在-O3处启用 矢量化SSE2-4 insn的优点是显而易见的,Sandy Bridge处理器每个周期最多可以执行三个256位操作(例如4个双倍乘法、4个双倍加法和一

如何在GCC中使用SSE2? 我想用双重价值观工作

我搜索s.th。这样地:
仅适用于双值。

如果要使用SSE2
double
insns,必须使用
gcc-mfpmath=sse-msse2
进行编译

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

还请注意,矢量化在
-O3
处启用

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

然而,《英特尔优化手册》建议,与传统的x87 INSN相比,即使对于标量操作,也应使用SSE,原因包括平坦寄存器模型和更短的延迟

编辑:


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

您可以使用
-msse
等,或者使用
-march=native
进行编译……就这样?我听说这会很复杂,必须使用内部函数。如果你想使用显式结构,就必须使用内部函数。有了编译器标志,您只需告诉编译器,当硬件可用且优化器确定它是一个不错的选择时,可以使用硬件。与某些
-O
级别一起使用。没有保证,但是试着比较一下汇编。如果您使用的是相对较新的CPU(<5年),那么您可能看不到双精度SSE带来的太多好处,因为大多数现代x86 CPU现在有两个FPU,而SSE上只有双精度的2路SIMD。如果内存正常工作,64位ABI中根本没有使用x87。@phkahler,是的,除了使用x87时的
长双精度
操作。