我正在为英特尔凌动处理器开发性能关键应用程序.
这个CPU有哪些最好的gcc优化标志?
GCC黑客之一Scott Rober Ladd 有一个名为Acovea的酷框架(通过进化算法分析编译器选项).它是一种遗传/进化算法框架,试图通过自然选择优化特定代码片段的GCC优化标志.
它的工作原理如下:你编写了一小段基准代码(它实际上必须很少,因为它将被重新编译并执行数千次),它代表了你想要优化的大型程序的性能特征.然后,Acovea随机构建了几十个不同的GCC命令行,并编译并运行每个命令行的基准测试.然后允许这些命令行中的最佳命令"交配"和"繁殖"新的"孩子",这些孩子(希望)从他们的"父母"继承最好的"基因".这个过程重复了几十个"代",直到出现一组稳定的命令行标志.
GCC 4.5将包含-march = atom和-mtune = atom选项.
资料来源:http://gcc.gnu.org/gcc-4.5/changes.html
我有一个脚本,可以自动为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低级优化的好文章:
http://virtualdub.org/blog/pivot/entry.php?id=286
http://virtualdub.org/blog/pivot/entry.php?id=287
好吧,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}"