【问题标题】:ICC vs GCC - Optimization and CPU architectureICC vs GCC - 优化和 CPU 架构
【发布时间】:2011-01-30 15:14:19
【问题描述】:

我有兴趣了解 GCC 在优化级别和迎合特定处理器架构方面与英特尔的 ICC 有何不同。我正在为 Linux 使用 GCC 4.1.2 20070626 和 ICC v11.1。

ICC 的优化级别(O1 到 O3)与 GCC 有何不同?

ICC 能够专门满足不同的架构(IA-32、intel64 和 IA-64)。我读过 GCC 有我认为类似的 -march 编译器选项,但我找不到要使用的选项列表。我使用的是 64 位的 Intel Xeon X5570。是否有任何其他 GCC 编译器选项可以满足我的 64 位 Intel CPU 应用程序的需求?

【问题讨论】:

    标签: gcc x86 compiler-construction 64-bit icc


    【解决方案1】:

    请参阅 GCC 手册中的第 3.17.15 节,ie386 and x86-64 Options,了解适用于这些架构的所有选项的完整列表和说明(IA-64 是安腾,您不太可能拥有其中之一)。

    在这种情况下最重要的选项是:

    • -m64生成64位代码;
    • -march= 针对特定 CPU 类型生成指令;和
    • -mtune= 针对特定 CPU 类型调整代码。

    【讨论】:

      【解决方案2】:

      icc -O2 -unroll2 大致相当于 gcc -O3 -ffast-math -fno-cx-limited-range -funroll-loops --param max-unroll-times=2 -O1 不会为任一编译器启用 simd 自动矢量化,因此差异较小。 icc 和 gcc 都提供了针对 64 位模式的单独构建的编译器;如果安装了两个 gcc 编译器,将支持上面关于 -m64 的建议。如果两者都安装了,icc 希望您通过获取它们的路径设置脚本来进行选择。 -march=native 是 gcc 选项,用于使用构建机器的完整指令集。 icc 可能会观察到这一点,但有一个等效选项 -xHost。在提出这个问题时,该 icc 选项可能仅适用于 Intel CPU。

      【讨论】:

        【解决方案3】:

        调整选项,反汇编代码,看看有什么不同

        【讨论】:

        • 不是一个很有用的答案,因为这只适用于他已经拥有的代码,而不适用于他将来可能编写的代码。
        • 你如何衡量不存在代码的 GCC 或 ICC 优化器的有效性?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-31
        • 2021-01-23
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多