如何在 GCC 中使用 SSE2?我想使用双值。
我搜索…… 像这样: http: //vrm-vrm.blogspot.com/2009/10/gcc-intrinsics.html 仅适用于双精度值。
如何在 GCC 中使用 SSE2?我想使用双值。
我搜索…… 像这样: http: //vrm-vrm.blogspot.com/2009/10/gcc-intrinsics.html 仅适用于双精度值。
如果要使用 SSE2 double
insns,则必须使用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,因此所有交互模块都必须使用此选项进行编译。