我正在为英特尔凌动处理器开发一个性能关键型应用程序。
这个CPU的最佳gcc优化标志是什么?
答案 0 :(得分:31)
GCC 4.5将包含-march = atom和-mtune = atom选项。
答案 1 :(得分:30)
有一个名为Acovea (Analysis of Compiler Options via Evolutionary Algorithm)的酷框架,由GCC黑客之一Scott Rober Ladd提供。它是一个遗传/进化算法框架,试图通过自然选择优化特定代码片段的GCC优化标记。
它的工作原理如下:你编写了一小段基准代码(真的必须很少,因为它将被重新编译并执行数千次)代表性能特征您要优化的较大程序。然后,Acovea随机构建了几十个不同的GCC命令行,并编译并运行每个命令行的基准测试。然后允许这些命令行中的最佳命令“交配”和“繁殖”新的“孩子”,这些孩子(希望)从他们的“父母”继承最好的“基因”。这个过程重复了几十个“代”,直到出现一组稳定的命令行标志。
答案 2 :(得分:12)
我有一个自动为CPU和编译器组合选择适当标志的脚本。 我刚刚更新它以支持Intel Atom:
http://www.pixelbeat.org/scripts/gcccpuopt
更新: 我之前为Atom指定了-march = prescott,但更多地了解它 表明Atom符合ISA标准,因此-march = core2更合适。 但请注意,Atoms是有序内核,其中最后一个是原始的pentium。 因此,对于-mtune = pentium也可能更好。不幸的是我没有 一个Atom来测试。我真的很感激,如果有人能够对这些差异进行基准测试:
-march=core2 -mfpmath=sse -O3
-march=core2 -mtune=pentium -mfpmath=sse -O3
更新: 以下是一些关于Atom低级优化的好文章:
答案 3 :(得分:5)
嗯,Gentoo wiki表示赞成:
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}”
答案 4 :(得分:3)
来自英特尔,Getting Started with MID
使用GCC进行编译时,可以使用一些推荐的标志:
答案 5 :(得分:2)
就像Pentium 4一样:
-march=prescott -O2 -pipe -fomit-frame-pointer
答案 6 :(得分:1)
我不知道GCC是否还有任何特定于Atom的优化标志,但Atom核心应该与原来的Pentium非常相似,MMX / SSE / SSE2 / SSE3 / SSSE3非常重要指令集。当然,如果您的代码是浮点数或DSP重的话,这些只会产生显着的差异。
也许你可以试试:
gcc -O2 -march = pentium -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath = sse
答案 7 :(得分:0)
这里有一些博客的交叉传播......我真正希望的是一个firefox编译的原子基准......
地址:http:// ivoras.sharanet.org/blog/tree/2009-02-11.optimizing-for-atom.html
“事实证明,使用-mtune = native,gcc似乎做得非常不错,而mtune = generic也是可以接受的。最大的收益(在这个数学重度基准测试中)来自于使用SSE进行数学运算,但即使是通过调整pentium4也会破坏它们。
“最快和最慢的优化之间的差异是21%。使用march而不是mtune的影响可以忽略不计(没有足够的差异来判断它是否有帮助。)
“(我已经包含了k6仅供参考 - 我知道Atom没有3dnow)
“延迟更新:调整k8(使用SSE和O3)会获得略高于182的最高分。”
答案 8 :(得分:0)
i686最接近。不要去核心。
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