这里有人对英特尔C++编译器和GCC进行了基准测试吗?

Jam*_*ond 26 c++ linux compiler-construction benchmarking boost

我不确定是否应该在这里发布这个问题,因为这似乎是一个面向编程的网站.

无论如何,我认为必须有一些大师知道这一点.

现在我有一台运行CentOS 5的AMD Opteron服务器.我想为一个相当大的基于c ++ Boost的程序安装一个编译器.我应该选择哪种编译器?

Goz*_*Goz 25

这里有一个有趣的PDF,它比较了许多编译器.

  • 在这方面,它是一个有趣的文件.我希望你能为GCC获得Visual astudio集成.那将是笨蛋的坚果...... (3认同)
  • Psssstttttt ....我正准备发布.它实际上只讨论微优化,并且似乎暗示gcc在大多数情况下比icc更好. (2认同)

jus*_*tin 19

我希望这不仅有助于伤害:)

我在一年前的某个时候做了一个小编译器枪战,我要记忆了.

  1. GCC 4.2(Apple)
  2. 英特尔10
  3. GCC 4.2(Apple)+ LLVM

我测试了我编写的多个模板重音频信号处理程序.

编译时间:英特尔编译器是迄今为止最慢的编译器 - 超过另一篇文章所引用的"慢2倍".

与英特尔相比,GCC非常好地处理了深层模板.

英特尔编译器生成了大量目标文件.

GCC + LLVM产生了最小的二进制.

由于程序的构造,生成的代码可能具有显着的差异,并且可以使用SIMD.

对于我写的方式,我发现GCC + LLVM生成了最好的代码.对于我在认真对待优化之前编写的程序(正如我所写),英特尔通常更好.

英特尔的业绩多种多样; 它处理的程序要好得多,有些程序要差得多.它很好地处理了原始处理,但我给GCC + LLVM蛋糕,因为当放入更大(正常)程序的上下文时......它做得更好.

英特尔赢得了开箱即用,数据处理数据庞大.

GCC单独生成最慢的代码,尽管它可以与测量和纳米优化一样快.我宁愿避免这些,因为风可能会随着下一个编译器的发布而改变方向,可以这么说.

我从来没有在这个测试中测量写得不好的程序(即结果优于流行性能库的分布).

最后,程序编写了几年,使用GCC作为当时的主要编译器.

更新:我还为Core2Duo启用了优化/扩展.程序足够干净,可以实现严格的别名.

  • @ int3简而言之,对于优化程序,我写道:非常严格/小,迫使编译器评估程序,提供特化/重载,不遗余力地实现编译时多态(与运行时),提供很大的可见性对于编译器,使用许多语言功能,const正确性,强制内联,具有令人难以置信的长警告列表.我衡量和基准,没有内联asm.具体到编译器枪战; 在我重写程序以利用矢量化/ SIMD insns(英特尔编译器擅长的领域)之前,我确实停止了.我希望有所帮助. (4认同)

Gle*_*len 15

MySQL团队曾发布过一次,icc给了他们10%的性能提升.我会试着找到这个链接.

总的来说,我发现'本机'编译器在各自的平台上比gcc表现更好

编辑:我有点休息.典型的收益是20-30%而不是10%.一些窄边案例的性能翻了一番. http://www.mysqlperformanceblog.com/files/presentations/LinuxWorld2004-Intel.pdf


Gau*_*thy 6

我想它会因代码而异,但是对于我现在正在使用的代码库,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)!

  • 请注意,当目标为x86-64时,`-mfpmath = sse`是默认值.此外,`-march = native`通常是利用硬件的好方法.偶尔(通常只使用最新的指令集),这会导致轻微的减速,可能是因为没有足够的时间来调整该指令集. (2认同)

Pee*_*oot 5

我们在我们的产品(DB2),Linux和Windows IA32/AMD64以及OS X(即除SunAMD之外的所有英特尔平台端口)上使用英特尔编译器.

我不知道数字,但性能足够好,我们:

  • 支付编译器,我被告知是非常昂贵的.
  • 使用2倍的构建时间(主要是因为它在允许自己运行之前花费时间获得许可证).