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
等工具选择性地禁用它们。