【问题标题】:How can I compile *without* various instruction sets enabled?我如何编译*没有*启用各种指令集?
【发布时间】:2015-06-09 18:58:25
【问题描述】:

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

例如,我想只用-O2gnu 编译器来编译它,看看它在限制为only SSE 时的执行情况,看看它调用了哪些标志默认。我还有一个正在使用的intel 编译器,我想隔离每个标志(或标志组合)对我的代码所做的事情,那么我如何确切地指定哪些标志是被调用?

如果这很重要,我正在与CC++Fortran 合作Linux

【问题讨论】:

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

标签: gcc intel gnu compiler-optimization


【解决方案1】:

对于GCC 编译器:
您必须使用 -mno-options 来执行此操作。

这些开关启用或禁用在 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

【讨论】:

    猜你喜欢
    • 2012-06-18
    • 2014-12-23
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多