从g ++ / gcc 3.2.3到4.2.4的性能提升

时间:2020-03-06 14:35:15  来源:igfitidea点击:

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

我曾尝试搜索gcc buzilla数据库,以查找有关哪些错误可能具有如此显着改进的提示,但我没有发现任何脱颖而出的错误。

改进是否是许多慢慢产生影响的小变化的结果?还是说有可能会有所作为的前五项改进?

在某些背景下,我们的代码库确实充分利用了STL容器和算法以及C ++功能(例如" inline"关键字)。

解决方案

以我的经验,3.4是性能基本达到顶峰的地方。 4.2在我的项目中实际上比3.4慢,其中4.3是第一个大致等于3.4的性能。 4.4比3.4快一点。

我发现在某些特定情况下,旧版本的gcc在代码中执行了一些令人难以置信的延迟工作-有一个特殊的功能从128个时钟从21个时钟从3.4个时钟降低到4.3个时钟,但这显然是一个特例(它是一个短暂的循环,仅添加一些不必要的指令会严重影响性能。

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

总的来说,尽管差异很少很大。就性能变化而言,我所看到的绝对值是3%至5%。

现在,请注意这是C; C ++中的情况可能有所不同。

3.3中的流非常慢,而3.4中的流却快得多。 (邮件在gcc邮件列表上)
我敢打赌其他事情也会有所改善。

我相信,优化器在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%。