英特尔凌动的GCC优化标志

时间:2008-09-21 09:59:31

标签: optimization gcc intel-atom

我正在为英特尔凌动处理器开发一个性能关键型应用程序。

这个CPU的最佳gcc优化标志是什么?

9 个答案:

答案 0 :(得分:31)

GCC 4.5将包含-march = atom和-mtune = atom选项。

来源:http://gcc.gnu.org/gcc-4.5/changes.html

答案 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进行编译时,可以使用一些推荐的标志:

  • -O2或-O1:O2标志优化速度,而-O1标志优化尺寸
  • -msse3
  • -march = core2的
  • -mfpmath = SSE

答案 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