代码之家  ›  专栏  ›  技术社区  ›  Richard Corden

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

  •  3
  • Richard Corden  · 技术社区  · 17 年前

    我已经试着搜索过了 gcc buzilla database 为了找到关于哪些bug可能有如此显著的改进的提示,但我没有发现任何一个bug作为候选者脱颖而出。

    这些改进是否是许多小变化的结果,这些变化慢慢产生了影响?或者有人说前五名的改进可能会带来不同?

    对于某些背景,我们的代码库确实使用了STL容器和算法,以及C++特性,例如“内联”关键字。

    3 回复  |  直到 17 年前
        1
  •  3
  •   Dark Shikari    17 年前

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

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

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

    总体而言,尽管差异很少很大;3-5%是绝对值 我已经看到了性能的变化。

    现在,注意这是C;C++中的东西可能不同。

        2
  •  2
  •   rlerallut    17 年前

    我相信优化器是在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
  •  1
  •   anon anon    17 年前

    message on gcc mailing list ) 我打赌其他方面也有所改善。