我有兴趣了解 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 的应用程序的需求吗?
icc -O2 -unroll2
大致相当于gcc -O3 -ffast-math -fno-cx-limited-range -funroll-loops --param max-unroll-times=2
gcc -O1 不会为任一编译器启用 SIMD 自动矢量化,因此差异较小。
没有选项的 ICC 默认启用优化并且-fp-model=fast=1(比gcc -ffast-math
),但 GCC 默认为-O0
。 (还-fno-fast-math
即使gcc -O3
. Only gcc -Ofast
启用像 ICC 默认值一样的快速数学。)
-march=native
是使用构建机器的完整指令集的 GCC 选项。国际商会支持-march=native
相当于自己的-xHost
选项。在提出这个问题时,该 ICC 选项可能仅适用于 Intel CPU。
GCC 可以配置为-m64
or -m32
作为默认值,但同一编译器可以编译任一位数的二进制文件。 ICC 提供单独构建的编译器以针对 64 位或 32 位模式;如果两者都安装了,icc 希望您通过获取其路径设置脚本来进行选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)