c++ - 我应该检查什么 : cpu time or wall time?

标签 c++ performance profiling

我有两种算法来完成相同的任务。要检查它们的性能,我应该检查什么:cpu 时间还是 wall time?我认为是 CPU 时间,对吧?

我正在对我的代码进行并行处理。要检查我的并行性能,我应该检查什么:cpu 时间还是 wall time?我认为现在是挂钟时间,对吧?

假设我已经使用多线程完成了理想的并行性。我认为 1 个线程的 cpu 时间将与 8 个线程相同,而 1 个线程的墙时间将比 8 个线程长 8 倍。这样对吗?

还有什么简单的方法可以检查这些时间吗?

最佳答案

答案取决于您真正想要衡量的是什么。

如果您有几个小代码序列,每个代码序列都在一个 CPU 上运行(即,它基本上是单线程的)并且您想知道哪个更快,您可能需要 CPU 时间。这将告诉您执行该代码所花费的时间,而不计算其他事情,例如 I/O、任务切换、花在其他进程上的时间、中断处理等。[注意:虽然它试图忽略其他事实,但您仍然会通常使用系统获得最准确的结果,否则尽可能保持静止。]

如果您正在编写多线程代码并想衡量您在处理器/内核之间分布代码的情况,您可能会衡量两者 CPU 时间和挂起时间,并进行比较他们俩。例如,如果您有 4 个内核可用,您的理想情况是挂起时间是 CPU 时间的 1/4

因此,对于多线程代码,您通常会分两个阶段完成工作:首先,您查看在线程上执行的时间,使用 CPU 时间。您进行优化以使其达到(合理的)最低限度。然后在第二阶段,您将墙时间与 CPU 时间进行比较,以尝试有效地使用多个内核。由于更改其中一项通常会影响另一项,因此您可能会多次迭代这两项(并且通常会在某种程度上在两者之间做出妥协)。

正如真的一般经验法则,您倾向于使用 CPU 时间来衡量单个代码位的微观基准,并使用墙时间来衡量更大的(系统级)基准。换句话说,当您想测量一段代码的运行速度而不是其他任何东西时,CPU 时间通常最有意义。当您想包括磁盘 I/O 时间、缓存等因素的影响时,您更有可能关心挂钟时间。

关于c++ - 我应该检查什么 : cpu time or wall time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20586661/

相关文章:

c++ - 需要作为一元 ‘&’ 操作数的 c 左值中的打印错误

c++ - 字符串数组到 C++ 函数

计算e^x的C++程序

c++ - 使用位操作影响内存消耗?

java - NetBeans Profiler - 未显示实时结果

c++ - 按位或运算符

android - 如何在一个布局中实现多个recyclerviews?

android - 使用 pg 选项在 Android 上进行分析

profiling - Julia:从代码中访问@time 计时和内存分配值

SQL 索引 - 计算列与计算列使用的字段