【问题标题】:C++ executeable becomes sometimes faster by a factor of 3 for no obvious reasonC++ 可执行文件有时会因为没有明显原因而变得快 3 倍
【发布时间】:2015-09-14 10:54:24
【问题描述】:

我的 c++ 项目是使用 cmake 构建的。有时它运行大约。没有明显原因,速度提高了 3 倍。

  • 当我在一个空的构建文件夹中从头开始构建项目时,在大约 90% 的情况下,所有可执行文件运行缓慢,无论 gcc 标志如何。

  • 当我使用不同的 gcc 标志再次创建慢速项目时,例如-02 而不是 -03,它在大约 90% 的情况下运行得很快。

  • 当我接触到慢速可执行文件的来源时,仅通过添加 cmets,然后再次执行,它在 10% 的情况下运行得很快。

单元测试总是通过。

之前有没有人无缘无故地看到过这种加速?

  • Ubuntu14.04
  • cmake 版本 2.8.12.2
  • GNU Make 3.81
  • gcc 4.8.4
  • 英特尔 i7-4710MQ

CmakeLists.txt 中的默认值:

set (CMAKE_CXX_FLAGS "-std=gnu++11 -Wall -pedantic -O3 -Idir")

据我所知,加速会影响项目的所有部分。因此,我认为它与包装无关。涉及的包:

  • OpenCV
  • OpenMP
  • 谷歌测试

如何测量速度:

  • 单元测试可执行文件在慢时运行 1200 毫秒,而在快速时仅运行 400 毫秒。它涉及大约 180 个仅 RAM 测试和大约 10 个磁盘 IO 测试。所有测试都以相同的方式进行,即每个单独的测试块时间在较慢的情况下大约大 3 倍。
  • 主要可执行文件进行光子传播(科学射线追踪),一束光子的传播时间以同样的方式影响。

感谢您的宝贵时间。

【问题讨论】:

  • 您可能错过了make clean;你可能会考虑简单地拥有你的(手写的)Makefile(而不是用难以掌握的cmake 生成它)

标签: c++ ubuntu gcc cmake


【解决方案1】:

gcc 标志 -O2-O3 可以使代码更快,所以没有什么意外。触摸文件和重建使其更快的事实可能意味着您的cmake 没有进行完整的重建。尝试进行手动重建(使用正常的make),看看事情是否更正常。

【讨论】:

    猜你喜欢
    • 2018-04-23
    • 1970-01-01
    • 2011-08-28
    • 2015-09-22
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 2017-06-04
    • 2020-12-26
    相关资源
    最近更新 更多