我有两个算法来完成同样的任务。要检查它们的性能,我应该检查什么:cpu时间或墙上时间?我认为这是cpu时间,对吧?
我正在对我的代码进行并行处理。要检查我的并行性能,我应该检查什么:cpu时间或挂起时间?我认为这是壁挂时间,对吗?
假设我使用多线程完成了理想的并行性。我认为1个线程的cpu时间与8个线程相同,1个threas的挂起时间将比8个线程长8倍。这样对吗?
还可以轻松检查那些时间吗?
答案 0 :(得分:3)
答案取决于你真正想要测量的东西。
如果你有一些小的代码序列,每个代码序列在一个CPU上运行(即,它基本上是单线程的),并且你想知道哪个更快,你可能需要CPU时间。这将告诉你执行该代码所花费的时间,而不计算其他事情,如I / O,任务切换,在其他进程上花费的时间,中断处理等。[注意:虽然它试图忽略其他事实,但你仍然会通常使用系统获得最准确的结果,否则尽可能保持静止。]
如果您正在编写多线程代码并想要衡量跨处理器/内核分发代码的程度,那么您可能会测量 CPU时间和待机时间,并进行比较他们俩。例如,如果您有4个可用核心,那么您的理想情况是,墙上时间为CPU时间的1/4 。
因此,对于多线程代码,您通常会分两个阶段完成工作:首先,使用CPU时间查看在线程上执行的时间。您进行优化以达到(合理)最小值。然后在第二阶段,您将墙上时间与CPU时间进行比较,以尝试有效地使用多个内核。由于改变一个经常影响另一个,你可能会多次迭代这两个(并且经常在两者之间妥协)。
就像真正的一般经验法则一样,您倾向于使用CPU时间来测量单个代码位的微观基准,以及更大(系统级)基准测试的挂起时间。换句话说,当你想测量一段代码的运行速度时,没有别的,CPU时间通常最有意义。当你想要包括诸如磁盘I / O时间,缓存等等的影响时,你就更有可能关心墙上的时间。
答案 1 :(得分:0)
待机时间会告诉您计算机需要多长时间。但它并没有告诉你任何关于代码执行的时间,因为它取决于让你的计算机忙碌的其他事情。
测量执行代码所花费的CPU时间有不同的机制 - 我个人喜欢getrusage()