-msse,-msse2,-mssse3,-msse4 rtc的cflgs sse选项有什么不同?以及如何确定?

yay*_*aya 18 gcc sse gnu g++ compiler-flags

对于GCC CFLAGS选项:-msse,-msse2,-mssse3,-msse4,-msse4.1,-msse4.2.它们是独家使用还是可以一起使用?

我的理解是,选择要设置的位置取决于程序将运行的目标拱,是否支持,这是正确的吗?

如果是这样,我怎么知道我的目标拱支持什么?在Linux中,我是cat/proc/cpuinfo,但是如果是mac还是Windows呢?

谢谢!

Gun*_*iez 30

-m切换可以并行地使用,此外它们中的一些由所述体系结构或其它开关暗示.例如,如果您为x86_64构建代码,-msse -msse2则始终启用.

对于要在系统上运行的代码,您应该选择-march=native,它将选择处理器上可用的代码.例如,如果你有一个Sandy Bridge,这将启用-msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2 -mavx.

如果要详细指定要使用的指令集,则应仅使用可用的指令,而不是始终使用"最新"指令集.目前是"最新"的-mavx2,我不推荐:第一款支持它的处理器将于2013年上市.

  • @steffen“对于 x86-32 编译器,必须使用 -march=cpu-type、-msse 或 -msse2 开关来启用 SSE 扩展并使此选项生效。对于 x86-64 编译器,默认情况下启用这些扩展。 ” ([来源](https://gcc.gnu.org/onlinedocs/gcc-9.2.0/gcc/x86-Options.html)) (3认同)