7

我有兴趣了解 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 应用程序的需求?

4

3 回答 3

1

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

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

  • -m64生成64位代码;
  • -march=为特定的 CPU 类型生成指令;和
  • -mtune=针对特定 CPU 类型调整代码。
于 2010-03-23T03:15:42.027 回答
1

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。

于 2016-02-10T00:05:15.083 回答
-1

调整选项,反汇编代码并查看差异

于 2010-03-23T04:03:28.997 回答