我应该检查什么:cpu时间还是墙时间
What should I check: cpu time or wall time?
我有两种算法来完成同一任务。要检查它们的性能,我应该检查什么:cpu时间还是墙时间?我认为是cpu时间,对吧?
我正在对代码进行并行处理。要检查并行性能,我应该检查什么:cpu时间还是墙时间?我想现在是墙时间,对吧?
假设我已经使用多线程实现了理想的并行。我认为1个线程的cpu时间将与8个线程相同,1个threas的墙时间将是8个线程的8倍。对吗?
还有什么简单的方法可以检查这些时间吗?
答案取决于您真正想要测量的内容。
如果你有几个小代码序列,每个序列都在一个CPU上运行(即,它基本上是单线程的),并且你想知道哪个更快,你可能需要CPU时间。这将告诉你执行代码所需的时间,而不计算其他事情,如I/O、任务切换、在其他进程上花费的时间、中断处理等。[注意:尽管它试图忽略其他事实,但在系统尽可能静止的情况下,你通常仍能获得最准确的结果。]
如果您正在编写多线程代码,并想衡量代码在处理器/内核之间的分布情况,您可能会同时测量CPU时间和墙时间,并将两者进行比较。例如,如果您有4个可用内核,那么您的理想情况是壁时间是CPU时间的1/4。
所以,对于多线程代码,您通常会在两个阶段完成任务:首先,您要查看在线程上执行的时间,使用CPU时间。你进行优化以使其达到(合理的)最小值。然后在第二阶段,将墙时间与CPU时间进行比较,以尝试有效地使用多个内核。由于更改其中一个通常会影响另一个,因此您很可能会多次迭代这两个(并且经常在某种程度上在两者之间折衷)。
正如真正的一般经验法则一样,您倾向于使用CPU时间来测量单个代码位的微观基准,而使用壁时间来测量更大的(系统级)基准。换句话说,当你想测量一段代码的运行速度,而不想测量其他速度时,CPU时间通常是最有意义的。当您想包括磁盘I/O时间、缓存等因素的影响时,您可能更关心墙时间。
墙时间告诉您的计算机用了多长时间。但它不会告诉你执行代码需要多长时间,因为它取决于其他让你的计算机忙碌的事情。
有不同的机制来测量执行代码所花费的CPU时间-我个人喜欢getrusage()
- 分别测量每个线程上花费的 CPU 时间(C++)
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 一段时间后 CPU 使用率高
- C/C++memcpu基准测试:测量CPU和墙时间
- 超过CPU时间限制:当MPI_Sent一个非常大的int*时
- 如何测量一组特定线程的 CPU 时间?
- OpenCV 3.4 C++ Cuda 加速比 CPU 花费更多时间
- 如何以C++而不是 CPU 时间测量挂钟时间
- 将返回 CPU 时间提升为 0
- C++中的双感叹号(!!)会花费更多的CPU时间吗
- 为什么内存访问时间远远超过CPU缓存大小时会增加
- 在我的CUDA运行时间计划中,CPU和GPU可以异步计算,但不能合作地计算
- 即使使用睡眠,线程也不会放弃CPU时间
- 以C++为单位测量程序的 CPU 时间和挂钟时间
- 在 Windows 上以C++计算 CPU 时间
- 一段时间后,C++应用程序占用100%的cpu周期
- 时间短函数与 CPU 时间使用 RTEMS 操作系统
- PDH 无法通过 PdhAddCounter() 访问总 CPU 时间
- 二叉搜索真的是在 0 时钟 CPU 时间内执行的吗?
- 我应该检查什么:cpu时间还是墙时间