我正在尝试使用各种指令集重新编译某些软件,具体而言,SSE
,SSE2
,SSE3
,SSSE3
,SSE4.1
,{{1 }}和SSE4.2
,我想看看代码如何执行而不用这些指令集,以确保我得到它们的全部效果。
例如,我想用AVX
编译器与-O2
编译器进行编译,并将其限制为仅限于 gnu
,以及看看它默认调用哪些标志。我还有一个SSE
编译器,我正在使用它来隔离每个标志(或标志组合)对我的代码所做的事情,所以如何指定完全哪个正在调用标志?
如果重要,我正与intel
上的C
,C++
和Fortran
合作。
答案 0 :(得分:3)
对于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和向量的级别 说明