4

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

我搜索…… 像这样: http: //vrm-vrm.blogspot.com/2009/10/gcc-intrinsics.html 仅适用于双精度值。

4

1 回答 1

5

如果要使用 SSE2 doubleinsns,则必须使用gcc -mfpmath=sse -msse2.

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

另请注意,矢量化在-O3.

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

但是,英特尔优化手册建议即使对标量操作也使用 SSE,原因包括平面寄存器模型和与传统 x87 insn 相比更短的延迟。

编辑:

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

于 2011-11-15T11:09:16.783 回答