2010-03-23 74 views
7

我很感兴趣的是GCC与英特尔ICC在优化级别以及迎合特定处理器体系结构方面的区别。我正在使用GCC 4.1.2 20070626和ICC v11.1 for Linux。ICC vs GCC - 优化和CPU体系结构

ICC的优化级别(O1到O3)与GCC有什么不同?如果它们完全不同?

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

谢谢。

问候, 雷恩

回答

1

看到GCC手册,ie386 and x86-64 Options了适用于这些架构(IA-64是安腾,这是不可能的,你有一个所有选项的完整列表,并描述部分15年3月17日那些)。

在这方面最重要的选项是:

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

曲调的选择,拆卸的代码和看到差异

+0

不是一个非常有用的答案,因为这只适用于他已有的代码,而不适用于将来可能编写的代码。 – 2010-04-25 12:17:47

+2

以及您如何衡量不存在代码的GCC或ICC优化器的有效性? – 2010-04-26 04:00:32

1

ICC -O2 -unroll2大致相当于GCC -O3 -ffast-数学-fno-CX-有限范围-funroll - 环 - param max-unroll-times = 2 -O1不会为任一编译器启用simd自动向量化,所以差异较小。 icc和gcc均提供单独构建的编译器,以实现64位模式;如果同时安装了gcc编译器,则会支持上面关于-m64的建议。 icc希望你选择,如果两者都安装,通过采购他们的路径设置脚本。 -march = native是使用构建机器的完整指令集的gcc选项。 icc可能会观察到这一点,但具有相同的选项-xHost。在此问题发生时,该icc选项可能只适用于Intel CPU。