如何在没有启用*各种指令集的情况下编译*?

时间:2015-06-08 18:20:10

标签: gcc intel gnu compiler-optimization

我正在尝试使用各种指令集重新编译某些软件,具体而言,SSESSE2SSE3SSSE3SSE4.1,{{1 }}和SSE4.2,我想看看代码如何执行而不用这些指令集,以确保我得到它们的全部效果。

例如,我想用AVX编译器与-O2编译器进行编译,并将其限制为仅限于 gnu,以及看看它默认调用哪些标志。我还有一个SSE编译器,我正在使用它来隔离每个标志(或标志组合)对我的代码所做的事情,所以如何指定完全哪个正在调用标志?

如果重要,我正与intel上的CC++Fortran合作。

1 个答案:

答案 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内置函数。

您可以在official GCC site

找到更多信息

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

  

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

More info here