性能改进从g ++ / gcc 3.2.3发展到4.2.4

时间:2008-09-23 08:41:28

标签: gcc g++

我们一直在研究g ++版本3.2.3和4.2.4。使用4.2.4,我们的一些代码库的性能改进非常重要。

我已经尝试搜索gcc buzilla database以找到有关哪些错误可能有如此显着改善的提示,但我没有发现任何突出的候选个体错误。

这些改进是否是许多缓慢产生影响的小变化的结果?或者说有哪些前5项改进可能会有所作为?

对于某些背景知识,我们的代码库确实充分利用了STL容器和算法,以及C ++功能,例如'inline'关键字。

3 个答案:

答案 0 :(得分:3)

根据我的经验,3.4是表现基本达到顶峰的地方;在我的项目中,4.2实际上比3.4慢,4.3是第一个大致相当于3.4的性能。 4.4略快于3.4。

我发现有一些特殊情况,旧版本的gcc在代码中做了一些令人难以置信的迟钝事情 - 有一个特殊的功能从128到21个时钟从3.4到4.3,但这显然是特殊的case(这是一个短循环,只添加了一些不必要的指令会严重影响性能)。

我个人使用3.4只是因为它编译得更快,使测试更快。我也试图避免使用最新版本,因为它们似乎有错误编译代码的习惯;例如,最近gcc版本上的--march core2会导致程序中的段错误,因为它会发出自动向量化的代码,试图对未对齐的地址执行对齐访问。

总体而言,差异很小;在绩效变化方面,我发现3-5%是绝对

现在,注意这是C;在C ++中可能会有所不同。

答案 1 :(得分:2)

我相信优化器在gcc4系列中完全重做了。例如,请参阅此页面关于矢量化:

http://gcc.gnu.org/projects/tree-ssa/vectorization.html

有关信息,我曾经用动态数组,静态数组和std :: vector做了c [i] = a [i] + b [i]的基准测试,它是最快的std :: vector( w / gcc 4.1)。性能差异为30%。

答案 2 :(得分:1)

3.3中的流速非常慢,3.4中的速度要快得多。 (message on gcc mailing list) 我打赌其他事情也有所改善。