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

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

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

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

有帮助吗?

解决方案

根据我的经验,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 ++中可能会有所不同。

其他提示

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

3.3中的流速非常慢,3.4中的速度要快得多。 ( gcc邮件列表上的消息) 我打赌其他事情也有所改善。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top