我正在尝试使用 CPU2006 运行各种基准测试,以了解各种优化对 gcc 速度的影响。我熟悉 -O1、-O2 和 -O3,但听说 -msse 是一个不错的优化。 -msse到底是什么?我还看到 -msse 在 64 位架构上是默认的,那么我如何禁用它来比较使用它和不使用它之间的差异?
-msse
激活SSE指令的生成。所有 64 位处理器 (x86-64) 都有它们,但一些较旧的 32 位处理器 (IA-32) 没有这些指令。这就是 GCC 默认设置的原因。
SSE
指令与向量运算和浮点有关。考虑到自动矢量化的机会在通用代码中很少见,您可能观察到的唯一区别是您是否使用浮点。
在 64 位上,要禁用 SSE 指令,请使用
-mno-sse
http://www.justskins.com/forums/gcc-option-msse-and-128289.html
SSE (http://it.wikipedia.org/wiki/Streaming_SIMD_Extensions) 顾名思义,是 Pentium 3 以来处理器中存在的 SSE 指令。它们对于某种矢量和浮点计算来说速度很快。它们在所有 64 位处理器中都可用,那么我们为什么要禁用它们呢?
您可以在 -msse 和 -msse2 之间进行选择。 SSE2 是另一个基于 SSE 构建的指令集,它添加了其他强大且非常快速的矢量指令。
Pentium 3 确实有 SSE,并且是 32 位处理器。 相反,SSE2 更现代,Pentium 4,仍然是 32 位处理器,具有 SSE2。