Jam*_*ond 26 c++ linux compiler-construction benchmarking boost
我不确定是否应该在这里发布这个问题,因为这似乎是一个面向编程的网站.
无论如何,我认为必须有一些大师知道这一点.
现在我有一台运行CentOS 5的AMD Opteron服务器.我想为一个相当大的基于c ++ Boost的程序安装一个编译器.我应该选择哪种编译器?
jus*_*tin 19
我希望这不仅有助于伤害:)
我在一年前的某个时候做了一个小编译器枪战,我要记忆了.
我测试了我编写的多个模板重音频信号处理程序.
编译时间:英特尔编译器是迄今为止最慢的编译器 - 超过另一篇文章所引用的"慢2倍".
与英特尔相比,GCC非常好地处理了深层模板.
英特尔编译器生成了大量目标文件.
GCC + LLVM产生了最小的二进制.
由于程序的构造,生成的代码可能具有显着的差异,并且可以使用SIMD.
对于我写的方式,我发现GCC + LLVM生成了最好的代码.对于我在认真对待优化之前编写的程序(正如我所写),英特尔通常更好.
英特尔的业绩多种多样; 它处理的程序要好得多,有些程序要差得多.它很好地处理了原始处理,但我给GCC + LLVM蛋糕,因为当放入更大(正常)程序的上下文时......它做得更好.
英特尔赢得了开箱即用,数据处理数据庞大.
GCC单独生成最慢的代码,尽管它可以与测量和纳米优化一样快.我宁愿避免这些,因为风可能会随着下一个编译器的发布而改变方向,可以这么说.
我从来没有在这个测试中测量写得不好的程序(即结果优于流行性能库的分布).
最后,程序编写了几年,使用GCC作为当时的主要编译器.
更新:我还为Core2Duo启用了优化/扩展.程序足够干净,可以实现严格的别名.
Gle*_*len 15
MySQL团队曾发布过一次,icc给了他们10%的性能提升.我会试着找到这个链接.
总的来说,我发现'本机'编译器在各自的平台上比gcc表现更好
编辑:我有点休息.典型的收益是20-30%而不是10%.一些窄边案例的性能翻了一番. http://www.mysqlperformanceblog.com/files/presentations/LinuxWorld2004-Intel.pdf
我想它会因代码而异,但是对于我现在正在使用的代码库,ICC 11.035在Xeon 5504上比gcc 4.4.0提高了近2倍.
icc选项:-O2 -fno-alias
gcc选项:-O3 -msse3 -mfpmath=sse -fargument-noalias-global
这些选项仅适用于包含计算密集型代码的文件,我知道没有别名.具有5级嵌套循环的单线程代码.
虽然启用了自动向量化,但两个编译器都没有生成矢量化代码(不是编译器的错误)
更新(2015/02/27):在优化一些地球物理代码(2013年第2季度)以在Sandy Bridge-E Xeon上运行时,我有机会将ICC 11.1与GCC 4.8.0的性能进行比较,而GCC现在正在生成比ICC更快的代码.该代码使用了AVX内在函数并且确实使用了8向矢量化指令(由于某些数据布局要求,编译器都无法正确地自动化代码).此外,GCC的LTO实施(嵌入在.o文件中的IR核心)比ICC更容易管理.使用LTO的GCC比没有LTO的ICC运行速度快大约3倍.如果没有LTO,我现在无法找到GCC的数字,但我记得它仍然比ICC更快.这绝不是关于ICC性能的一般性陈述,但结果足以让我们继续使用GCC 4.8.*.
期待GCC 5.0(http://www.phoronix.com/scan.php?page=article&item=gcc-50-broadwell)!
我们在我们的产品(DB2),Linux和Windows IA32/AMD64以及OS X(即除SunAMD之外的所有英特尔平台端口)上使用英特尔编译器.
我不知道数字,但性能足够好,我们: