【发布时间】:2015-09-16 12:55:38
【问题描述】:
我正在尝试分析 C++ 应用程序。我试过 gprof、HPCToolkit 和 ScoreP。我的问题是,对于不同的运行,我获得不同的运行时间,从一次执行到另一次执行的差异约为 10%(如 2.5 和 2.7 秒)。为什么?我记得当我在 Cray 系统上使用 CrayPat 时,不同的执行之间根本没有区别。 谢谢
ps:我在 debian 8 上
【问题讨论】:
-
那些分析器给你的是 CPU 时间而不是 run 时间?此外,普通家用计算机上的大多数分析器都是通过采样工作的,任何采样方法都不精确,具体取决于采样率。
-
你知道如何提高精度吗?
-
@rosilho:最好不要期望挂钟运行时间的精确可重复性,因为除了最简单的计算机之外,所有计算机一次都在做不止一件事。如果您这样做的原因是为了寻找加速,这里有一个much better method。
-
是的,我知道内核会根据需要停止执行等等。事实上,我已经尝试将进程的好处降到最低,但即使运行时间发生了变化。我希望有一种方法可以绝对优先处理该过程,使其无法停止。
-
@rosilho:您进行分析是有原因的。有些人只是想知道这些数字,为了他们自己。大多数人都在努力寻找加快代码速度的方法(如果你愿意,也可以是“瓶颈”)。为此,总时间是多少并不重要。只需要找到负责大部分时间的活动。这些活动将优先出现在堆栈样本上无需测量。这就是the method I linked above 背后的秘密。
标签: c++ performance profiling gprof cpu-time