3

我们一直在研究 g++ 版本 3.2.3 和 4.2.4。在 4.2.4 中,我们的一些代码库的性能改进非常显着。

我已经尝试搜索gcc buzilla 数据库以找到有关哪些错误可能有如此显着改进的提示,但我没有找到任何作为候选者脱颖而出的单个错误。

这些改进是许多慢慢产生影响的小变化的结果吗?或者有没有说可能产生影响的前 5 项改进?

对于某些背景,我们的代码库确实很好地利用了 STL 容器和算法,以及诸如“inline”关键字之类的 C++ 特性。

4

3 回答 3

3

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

我发现了一些特定的情况,旧版本的 gcc 在代码中做了一些令人难以置信的延迟事情——有一个特定的函数从 3.4 到 4.3 从 128 到 21 个时钟,但这显然是一个特殊情况(它是一个短循环,仅添加一些不必要的指令会严重损害性能)。

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

总体而言,尽管差异很少很大;就性能变化而言,3-5% 是我见过的绝对最多的。

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

于 2008-09-23T08:45:40.143 回答
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%。

于 2008-09-23T08:57:20.287 回答
1

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

于 2008-09-23T08:52:44.353 回答