【发布时间】:2010-09-11 18:14:05
【问题描述】:
我正在为英特尔凌动处理器开发性能关键型应用程序。
此 CPU 的最佳 gcc 优化标志是什么?
【问题讨论】:
-
英特尔 C 编译器 (icc) 怎么样?至少在它附带的基准上,对 gcc 的统治是相当明显的......
标签: optimization gcc intel-atom
我正在为英特尔凌动处理器开发性能关键型应用程序。
此 CPU 的最佳 gcc 优化标志是什么?
【问题讨论】:
标签: optimization gcc intel-atom
有一个很酷的框架Acovea (Analysis of Compiler Options via Evolutionary Algorithm),由 GCC 黑客之一 Scott Rober Ladd 开发。它是一个遗传/进化算法框架,试图通过自然选择优化特定代码段的 GCC 优化标志。
它的工作原理是这样的:你编写一小段代表性能特征的基准代码(它真的必须很少,因为它会被重新编译和执行数千次)您要优化的较大程序。然后,Acovea 随机构建了几十个不同的 GCC 命令行,并使用它们中的每一个编译和运行您的基准测试。然后允许这些命令行中最好的“交配”和“繁殖”新的“孩子”,这些“孩子”(希望)从他们的“父母”那里继承最好的“基因”。这个过程会重复几十“代”,直到出现一组稳定的命令行标志。
【讨论】:
我不知道 GCC 是否有任何特定于 Atom 的优化标志,但 Atom 内核应该与原始 Pentium 非常相似,并且非常重要地添加了 MMX/SSE/SSE2/SSE3/SSSE3指令集。当然,这些只有在您的代码是浮点数或 DSP 繁重的情况下才会产生显着差异。
也许你可以试试:
gcc -O2 -march=pentium -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath=sse
【讨论】:
就像奔腾 4:
-march=prescott -O2 -pipe -fomit-frame-pointer
【讨论】:
嗯,Gentoo wiki 为 prescott 声明:
http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel#Atom_N270
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
【讨论】:
我有一个脚本可以为您的 CPU 和编译器组合自动选择适当的标志。 我刚刚更新了它以支持 Intel Atom:
http://www.pixelbeat.org/scripts/gcccpuopt
更新: 我之前为 Atom 指定了 -march=prescott,但对它进行了更多研究 表明 Atom 符合 merom ISA,因此 -march=core2 更合适。 但是请注意,Atom 是有序内核,最后一个是原始的 pentium。 因此,-mtune=pentium 也可能更好。不幸的是我没有 一个要测试的 Atom。如果有人可以对以下之间的差异进行基准测试,我将不胜感激:
-march=core2 -mfpmath=sse -O3
-march=core2 -mtune=pentium -mfpmath=sse -O3
更新: 这里有几篇关于 Atom 低级优化的好文章:
【讨论】:
-march=core2 和-mtune=pentium 根本不起作用:我得到arg.c:1: error: CPU you selected does not support x86-64 instruction set
gcc44 -march=core2 -mtune=pentium -m32 -o lol lol.c 会退出,并出现关于无法找到 -lgcc 的错误。 gcccpuopt 告诉我 -m32 -march=core2 -mtune=pentium -mfpmath=sse 是最佳配置。
这里有一些博客的交叉传播……我真正希望的是一个 Firefox 编译的原子基准测试……
地址:http://ivoras.sharanet.org/blog/tree/2009-02-11.optimizing-for-atom.html
“事实证明,gcc 在使用 -mtune=native 时似乎做得非常好,而且 mtune=generic 是可以接受的。最大的收益(在这个数学密集的基准测试中)来自使用 SSE 进行数学计算,但即使是它们也被 pentium4 的调优破坏了。
“最快和最慢优化之间的差异是 21%。使用 March 而不是 mtune 的影响可以忽略不计(没有足够的差异来判断它是否有帮助)。
"(我包含了 k6 仅供参考 - 我知道 Atom 没有 3dnow)
“后期更新:针对 k8 进行调优(使用 SSE 和 O3)产生的最佳分数略高,为 182。”
【讨论】:
来自英特尔,Getting Started with MID
使用 GCC 编译时,有几个推荐使用的标志:
【讨论】:
i686 最接近。不要选择 core2。
GCC 4.1 -O3 -march=i686 GCC 4.3 -O3 -march=native
GCC 4.1 -O4 -ffast-math GCC 4.3 -O4 -ffast-math
http://macles.blogspot.com/2008/09/intel-cc-compiler-gcc-and-intel-atom.html
【讨论】:
GCC 4.5 将包含 -march=atom 和 -mtune=atom 选项。
【讨论】: