现在,我基本上有一个使用时钟来测试我的程序执行某些操作所花费的时间的程序,通常它可以精确到几毫秒。我的问题是:如果CPU负载过重,我是否还会得到相同的结果?
时钟仅在CPU处理我的进程时才计数吗?
假设:多核CPU,但是没有利用多线程的进程
最佳答案
clock
的功能取决于操作系统。在Windows中,从很长的距离来看,clock
给出了经过的时间,而在大多数其他OS(肯定是Linux,MacOS和其他与Unix相关的OS)中。
根据您实际要达到的目标,可能要测量经过时间或CPU时间。
在运行其他进程的系统中,经过时间和CPU使用率之间的差异可能很大(当然,如果您的CPU不忙于运行应用程序,例如,等待网络数据包断开连接或传输文件数据)从硬盘上读取),则对于其他应用程序而言,经过时间是“可用的”。
当同一系统中正在运行其他进程时,还会有大量的错误因素/干扰因素:
clock
作为CPU时间的量度,则此处的精度并不总是那么好-例如,很可能以CPU时间计时器为单位,并且您的进程可能无法运行例如,如果正在执行I/O,则为“full tick”。 受CPU其他内核上运行的其他进程的影响。
为了准确地度量您的进程使用了多少系统资源,您需要处理器性能计数器(以及可重现的测试用例,因为您可能需要多次运行相同的设置,以确保获得性能的“正确”组合柜台)。当然,这些计数器大多数都在系统范围内,并且某些处理(例如中断和其他随机干扰)将影响测量,因此,如果您没有许多其他(繁忙)过程,则结果最准确在系统中运行。
当然,在许多情况下,仅测量应用程序的总时间就足够了。同样,只要您有一个可重现的测试用例,每次在特定情况下运行,它都会给出相同(或至少相似)的计时。
每个应用程序都不同,每个系统都不同。性能测量是一个巨大的主题,而且很难涵盖所有内容-当然,我们在这里并不是要回答一些非常具体的问题,即“如何使我的百万分之一的PI能够在运行时以更快的速度运行是在同一系统中运行的其他进程?
关于c++ - c++中的clock()是否与沉重的CPU负载一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31484360/