【问题标题】:Is there a good test for C++ optimizing compilers?对 C++ 优化编译器有很好的测试吗?
【发布时间】:2011-11-15 05:42:21
【问题描述】:

我正在用简单的代码示例评估 Visual C++ 10 优化编译器,所以看看机器代码发出的效果有多好,到目前为止我没有创造性的用例。

是否有一些示例代码库通常用于评估优化的 C++ 编译器的性能?

【问题讨论】:

  • 如果我正在评估一个编译器,我会查看一些代表我将要使用它编译的东西的代码...
  • 您确实需要相当大且多样化的代码库才能正确执行此操作,因为编译器可能会应用许多不同的优化类别。或者,只对与您自己的特定需求和用例相关的代码进行基准测试。
  • 微软有几篇关于他们自己的测试的文章仅供参考,blogs.msdn.com/b/vcblog/archive/2010/07/07/… 和 blogs.msdn.com/b/vcblog/archive/2009/12/01/gl-and-pgo.aspx 但正如 @aix 所说,最相关的测试将是代码库上的一个,代表你的实际情况做。
  • 提升回归测试是否足够好?
  • @aix:我建议编译 代码而不是等效。节省大量精力并防止潜在的不等价;)

标签: c++ visual-c++ optimization code-generation compiler-optimization


【解决方案1】:

唯一有效的基准是模拟您正在开发的代码类型的基准。优化器对不同的应用程序和不同的编码风格做出不同的反应,唯一真正重要的是您将要使用编译器编译的代码。

【讨论】:

    【解决方案2】:

    尝试对 Eigen 等库进行基准测试 (http://eigen.tuxfamily.org/index.php?title=Main_Page)。

    【讨论】:

    • 然后为 Eigen 选择最好的编译器? (而不是为您的问题创建最佳代码的那个)。
    • 如果我错了,请纠正我,但我知道 OP 对针对特定代码段对编译器进行基准测试不感兴趣。
    【解决方案3】:

    相当多的基准测试使用 scimark:http://math.nist.gov/scimark2/download_c.html 但是,您应该选择测试的内容(单独测试),因为某些基准测试可能会由于循环展开不佳而失败,但其余代码非常好,但有些else 更好的只是循环展开的原因(即其生成的其余代码低于标准)

    【讨论】:

      【解决方案4】:

      正如已经说过的,您确实需要在典型目标环境中为您自己的应用程序的典型用例上下文中衡量优化。出于这个原因,我在自己的自动回归套件中包含了计时器,并发现了一些非常不寻常的结果,如previous question FWIW 中所述,我发现 VS2010 SP1 在我自己的应用程序上创建代码的速度平均比 VS2008 快 8% , 约 13% 采用全程序优化。这在用例中分布不均。我也倾向于看到长时间测试运行之间的显着差异,这些差异在更小的测试用例中是不可见的。我还没有进行平台比较,例如许多增益平台或硬件是特定的。

      我想许多优化器会经过微调,以针对众所周知的基准套件提供最佳结果,这反过来可能意味着这些不是测试优化优势的最佳代码片段。 (当然是推测)

      【讨论】:

        猜你喜欢
        • 2014-04-18
        • 2012-02-19
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        • 2014-02-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多