我有两种算法来完成相同的任务。要检查它们的性能,我应该检查什么:cpu 时间还是 wall time?我认为这是CPU时间,对吗?
我正在对我的代码进行并行处理。要检查我的并行性能,我应该检查什么:cpu 时间还是 wall time?我想现在是墙上时间了,对吧?
假设我已经使用多线程实现了理想的并行性。我认为1个线程的CPU时间将与8个线程相同,并且1个线程的wall time将比8个线程长8倍。这样对吗?
还有什么简单的方法可以检查那些时间?
答案取决于您真正想要衡量的内容。
如果您有几个小代码序列,其中每个代码序列都在单个 CPU 上运行(即,它基本上是单线程)并且您想知道哪个更快,那么您可能需要 CPU 时间。这将告诉您执行该代码所花费的时间,而不计算其他因素,如 I/O、任务切换、其他进程花费的时间、中断处理等。 [注意:虽然它试图忽略其他事实,但您仍然会通常使用系统获得最准确的结果,否则尽可能静止。]
If you're writing multi-threaded code and want to measure how well you're distributing your code across processors/cores, you'll probably measure both CPU time and wall time, and compare the two. If, for example, you have 4 cores available, your ideal would be that the wall time is 1/4th the CPU time.
因此,对于多线程代码,您通常会分两个阶段执行操作:首先,使用 CPU 时间查看线程上执行的时间。您进行优化以使其达到(合理的)最小值。然后在第二阶段,您将壁时间与 CPU 时间进行比较,以尝试有效地使用多个内核。由于更改其中之一通常会影响另一个,因此您很可能会多次迭代这两者(并且通常会在某种程度上在两者之间做出妥协)。
就像一个really一般经验法则,您倾向于使用 CPU 时间来衡量各个代码位的微观基准,并使用挂起时间来衡量更大的(系统级)基准。换句话说,当您想要测量一段代码的运行速度而不是其他时,CPU 时间通常最有意义。当您想要考虑磁盘 I/O 时间、缓存等因素的影响时,您更有可能关心挂机时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)