drj*_*rm3 6 gcc gnu intel compiler-optimization
我正在尝试使用各种指令集重新编译一些软件,特别是SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, 和AVX, 我想看看没有这些指令集的代码如何执行以确保我得到它们的全部效果。
例如,我想只-O2用gnu编译器编译它,看看它在将它限制为only 时的性能如何SSE,看看它默认调用哪些标志。我还有一个intel正在使用的编译器,我想隔离每个标志(或标志组合)对我的代码所做的事情,那么我如何才能准确指定正在调用哪些标志?
如果它的事项,我有工作C,C++和Fortran上Linux。
对于GCC编译器:
您必须使用-mno-选项来执行此操作。
这些开关启用或禁用MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、AVX、AVX2、AVX512F、AVX512PF、AVX512ER、AVX512CD、SHA、AES、PCLMUL、FSGSBASE6、FDRND、F中的指令的使用、SSE4A、FMA4、XOP、LWP、ABM、BMI、BMI2、FXSR、XSAVE、XSAVEOPT、LZCNT、RTM 或 3DNow!扩展指令集。这些扩展也可用作内置功能:请参阅 X86 内置功能,了解这些开关启用和禁用功能的详细信息。
您可以在GCC 官方网站上找到更多信息
对于ICC编译器,您必须使用以下组合:
-march=”cpu” 针对特定的 cpu 进行优化
-mtune=”cpu” 只为特定的 cpu 生成代码
-msse3、-msse4、-mavx 等级别的 SIMD 和向量指令