use*_*020 2 c++ performance profiling
我有两种算法来完成相同的任务。要检查它们的性能,我应该检查什么:cpu time 或 wall time?我认为是 CPU 时间,对吧?
我正在对我的代码进行并行处理。要检查我的并行性能,我应该检查什么:cpu time 或 wall time?我认为是墙壁时间,对吧?
假设我已经使用多线程完成了理想的并行性。我认为 1 个线程的 cpu 时间将与 8 个线程相同,而 1 个线程的壁挂时间将比 8 个线程长 8 倍。这样对吗?
还有任何简单的方法来检查这些时间吗?
答案取决于您真正要测量的内容。
如果您有几个小代码序列,其中每个都在单个 CPU 上运行(即,它基本上是单线程的)并且您想知道哪个更快,您可能需要 CPU 时间。这将告诉您执行该代码所花费的时间,而不计算 I/O、任务切换、在其他进程上花费的时间、中断处理等。 [注意:尽管它试图忽略其他事实,您仍然会通常使用系统获得最准确的结果,否则尽可能静止。]
如果你正在编写多线程代码,并想衡量如何好您跨处理器/内核发布的代码,您可能会测量两个CPU时间和挂钟时间,并比较两者。如果,例如,你可以有4个核心,你的理想是,隔离墙时间是1/4个的CPU时间。
因此,对于多线程代码,您通常会分两个阶段做事:首先,您查看在线程上执行的时间,使用 CPU 时间。您进行优化以使其达到(合理的)最低限度。然后在第二阶段,您将挂机时间与 CPU 时间进行比较,以尝试有效地使用多个内核。由于更改一个通常会影响另一个,因此您可能会多次迭代这两个(并且通常在某种程度上在两者之间进行折衷)。
正如一个非常普遍的经验法则,您倾向于使用 CPU 时间来测量单个代码位的微观基准,并使用壁垒时间来测量更大的(系统级)基准。换句话说,当你想衡量一段代码的运行速度时,除此之外,CPU 时间通常最有意义。当您想包括磁盘 I/O 时间、缓存等因素的影响时,您就更有可能关心挂墙时间。
| 归档时间: |
|
| 查看次数: |
970 次 |
| 最近记录: |