Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我应该检查什么:cpu时间还是墙时间?_C++_Performance_Profiling - Fatal编程技术网

C++ 我应该检查什么:cpu时间还是墙时间?

C++ 我应该检查什么:cpu时间还是墙时间?,c++,performance,profiling,C++,Performance,Profiling,我有两个算法来完成相同的任务。要检查它们的性能,我应该检查什么:cpu时间还是墙时间?我想这是cpu时间,对吗 我正在做代码的并行性。要检查并行性能,我应该检查什么:cpu时间还是墙时间?我想现在是墙时间,对吗 假设我已经使用多线程实现了理想的并行性。我认为1个线程的cpu时间将与8个线程相同,1个线程的墙时间将比8个线程长8倍。是这样吗 还有什么简单的方法可以检查这些时间吗?墙上的时间告诉你你的电脑用了多长时间。但是它并没有告诉你执行代码需要多长时间,因为这取决于让你的计算机忙的其他事情 测量

我有两个算法来完成相同的任务。要检查它们的性能,我应该检查什么:cpu时间还是墙时间?我想这是cpu时间,对吗

我正在做代码的并行性。要检查并行性能,我应该检查什么:cpu时间还是墙时间?我想现在是墙时间,对吗

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


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

墙上的时间告诉你你的电脑用了多长时间。但是它并没有告诉你执行代码需要多长时间,因为这取决于让你的计算机忙的其他事情


测量执行代码所花费的CPU时间有不同的机制-我个人喜欢
getrusage()

答案取决于您真正想要测量的内容

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

如果您正在编写多线程代码,并且希望测量代码在处理器/内核之间的分布情况,那么您可能会测量CPU时间和墙时间,并比较两者。例如,如果您有4个可用的内核,那么您的理想情况是墙壁时间是CPU时间的1/4

因此,对于多线程代码,您通常会在两个阶段完成工作:首先,您将使用CPU时间查看线程上执行的时间。您可以优化以使其达到(合理的)最小值。然后在第二阶段,比较墙壁时间和CPU时间,以尝试有效地使用多个内核。由于更改一个通常会影响另一个,因此您可能会多次迭代这两个过程(并且通常会在一定程度上折衷这两个过程)


正如一条非常普遍的经验法则,您倾向于使用CPU时间来测量单个代码位的微观基准测试,而使用墙时间来测量更大的(系统级)基准测试。换句话说,当您想测量一段代码的运行速度时,CPU时间通常是最有意义的。如果您想考虑磁盘I/O时间、缓存等因素的影响,那么您可能更关心墙时间。

这有点宽泛。你能把你的问题缩小到你正在讨论的具体问题吗?让我的问题更具体一些。谢谢。作为一个磁盘I/O和缓存结合在一起的例子——如果你的代码让机器陷入交换文件的狂热,那么它的CPU时间可能表明它“快”,但你知道(在那些内存限制内),它实际上和墙时间一样慢。