Gcc 如何编译*而不启用*各种指令集?

Gcc 如何编译*而不启用*各种指令集?,gcc,intel,gnu,compiler-optimization,Gcc,Intel,Gnu,Compiler Optimization,我试图用各种指令集重新编译一些软件,具体来说,SSE,SSE2,SSE3,SSSE3,SSE4.1,SSE4.2,以及AVX,我想看看代码在没有这些指令集的情况下是如何执行的,以确保我得到了它们的全部效果 例如,我想用-O2和gnu编译器来编译它,并查看当它仅限于SSE时它是如何执行的,以查看默认情况下它调用了哪些标志。我还有一个正在使用的intel编译器,我想隔离每个标志(或标志组合)对我的代码所做的操作,因此如何准确地指定调用的标志 如果重要的话,我正在使用C、C++和Fortran在Lin

我试图用各种指令集重新编译一些软件,具体来说,
SSE
SSE2
SSE3
SSSE3
SSE4.1
SSE4.2
,以及
AVX
,我想看看代码在没有这些指令集的情况下是如何执行的,以确保我得到了它们的全部效果

例如,我想用
-O2
gnu
编译器来编译它,并查看当它仅限于
SSE
时它是如何执行的,以查看默认情况下它调用了哪些标志。我还有一个正在使用的
intel
编译器,我想隔离每个标志(或标志组合)对我的代码所做的操作,因此如何准确地指定调用的标志


如果重要的话,我正在使用
C
C++
Fortran
Linux
上为
GCC
编译器工作:
您必须使用
-mno-
选项来执行此操作

这些开关启用或禁用MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、AVX、AVX2、AVX512F、AVX512PF、AVX512ER、AVX512CD、SHA、AES、PCLMUL、FSGSBASE、RDRND、F16C、FMA、SSE4A、FMA4、XOP、LWP、ABM、BMI、BMI2、FXSR、XSAVE、XSAVEOPT、LZCNT、RTM或3DNow中指令的使用!扩展指令集。这些扩展还可以作为内置函数提供:有关这些开关启用和禁用的函数的详细信息,请参阅X86内置函数

更多信息,请访问

对于
ICC
编译器,您必须使用 结合:

-march=“cpu”针对特定cpu进行优化
-mtune=“cpu”仅为特定cpu生成代码
-msse3,-msse4,-mavx等SIMD和矢量的级别 指示


GCC的哪个版本?他们从4.8->4.9更改了很多标志。正确的答案是“是”。我们有gcc 4.2.1、4.4.7、4.5.2、4.8.1和各种版本的icc。我想比较每一个的运行时、效率等。是否重复?尝试类似于
-march=pentium3
的方法。在x64上,您将无法低于SSE2,因为所有x64都有SSE2。您还可以使用
-mno avx
等工具选择性地禁用它们。