2008-09-23 29 views
3

我们一直在寻找g ++版本3.2.3和4.2.4。对于4.2.4,我们一些代码库的性能改进非常重要。从g ++/gcc 3.2.3到4.2.4的性能改进

我试过搜索gcc buzilla database以找到有关哪些错误可能有如此戏剧性改善的提示,但我没有发现任何突出显示为候选项的单个错误。

这些改进是多少小小改变的结果,慢慢产生了影响?或者有没有说过可能会有所作为的前5项改进?

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

回答

3

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

我发现有一些特定的情况,我发现旧版本的gcc在代码中做了一些令人难以置信的迟钝的事情 - 有一个特定的函数从3.4到4.3从128到21个时钟,但显然这是一个特殊情况(这是一个短暂的循环,只增加了一些不必要的指令,大大伤害了性能)。

我个人使用3.4,只是因为它编译速度快得多,使测试更快。我也尝试避免使用最新版本,因为它们似乎有不良编译代码的恶习; - 例如,在最近的gcc版本上运行core2会在我的程序中导致segfaults,因为它会发出尝试在未对齐的地址上执行对齐访问的自动插件代码。

总体而言,差异很小, 3-5%是绝对的大多数我已经看到了性能变化。

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

+0

我们的一些代码库已经有所改进。至少在一种情况下,事情有了很大的改进,我们花了很长时间才开心,因为编译器中没有导致崩溃的错误。 – 2008-09-23 08:49:08

1

3.3中的数据流非常慢,3.4中的数据流速度更快。 (message on gcc mailing list) 我打赌其他的东西也改善了。

2

我相信优化器在gcc4系列中完全重写了。看到这个页面,例如,约矢量:

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

有关信息,我曾经做过的C基准[I] = A [1] + B [I]与动态数组,静态数组和性病:: vector,它是最快的(w/gcc 4.1)的std :: vector。性能差异达30%。