28

我正在为 Intel Atom 处理器开发性能关键型应用程序。

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

4

9 回答 9

33

有一个很酷的框架,叫做Acovea(通过进化算法分析编译器选项),由 GCC 黑客之一的 Scott Rober Ladd 编写。它是一个遗传/进化算法框架,试图通过自然选择优化特定代码段的 GCC 优化标志。

它的工作原理是这样的:您编写一小段基准代码(它确实必须很小,因为它将被重新编译和执行数千次),代表您要优化的较大程序的性能特征。然后,Acovea 随机构建了几十个不同的 GCC 命令行,并使用它们中的每一个编译和运行您的基准测试。然后允许这些命令行中最好的“交配”和“繁殖”新的“孩子”,这些“孩子”(希望)从他们的“父母”那里继承最好的“基因”。这个过程重复了几十“代”,直到出现一组稳定的命令行标志。

于 2008-09-21T12:17:38.700 回答
32

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

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

于 2009-11-14T12:51:30.710 回答
12

我有一个脚本可以自动为您的 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 低级优化的好文章:

于 2008-12-19T01:53:18.240 回答
5

好吧,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}"

于 2008-11-21T08:03:06.647 回答
4

来自英特尔,MID 入门

使用 GCC 编译时,有几个推荐使用的标志:

  • -O2 或 -O1:O2 标志优化速度,而 -O1 标志优化大小
  • -msse3
  • -三月=核心2
  • -mfpmath=sse
于 2009-09-09T17:30:45.603 回答
2

就像奔腾 4:

-march=prescott -O2 -pipe -fomit-frame-pointer
于 2008-11-18T22:57:11.990 回答
1

我不知道 GCC 是否有任何特定于 Atom 的优化标志,但 Atom 内核应该与原始 Pentium 非常相似,并且非常重要地添加了 MMX/SSE/SSE2/SSE3/SSSE3 指令集。当然,这些只有在您的代码是浮点数或 DSP-heavy 时才会产生显着差异。

也许你可以尝试:

gcc -O2 -march=pentium -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath=sse

于 2008-09-22T22:54:46.663 回答
0

这里有一些博客的交叉授粉......我真正希望的是一个Firefox-compiled-for-atom基准......

地址: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。”

于 2009-05-26T20:32:49.127 回答
-1

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

于 2009-10-01T05:46:15.480 回答