繁体   English   中英

如何解释clock()?

[英]How to interpret clock()?

在我的C ++程序中,我通过clock()命令测量CPU时间。 由于代码在不同计算机的集群上执行(运行所有相同的操作系统,但具有不同的硬件配置,即不同的CPU),我很想知道测量实际执行时间。 这是我的场景:

据我所知,clock()给出了自固定日期以来经过的CPU时钟周期数。 我通过再次调用clock()并建立差异来测量相对持续时间。

那么在C ++中定义内部clock()的是什么? 如果我有1.0 GHz的CPU A和2.0 GHz的CPU B并且在它们上运行相同的代码,那么CPU A和B需要多少个时钟才能完成? clock()是否与“完成的工作”相对应? 还是真的是“时间”?

编辑:由于未设置CLOCKS_PER_SEC,我无法在几秒钟内将它用于将时钟转换为运行时。 正如手册所说,CLOCKS_PER_SEC取决于硬件/架构。 这意味着时钟对硬件有依赖性。 所以,我真的需要知道clock()给了我什么,没有任何额外的计算。

无论CPU的时钟频率如何, clock()函数都应返回最近可能的CPU时间表示。 CPU的时钟速度可能干预(但不一定)的是粒度; 但更常见的是,时钟的粒度取决于某些外部时间源。 (在遥远的过去,它通常基于电源线频率,粒度为1/50或1/60秒,具体取决于您所在的位置。)

要以秒为单位获得时间,请除以CLOCKS_PER_SEC 但请注意, clock()CLOCKS_PER_SEC都是整数值,因此除法是不可变的。 在进行除法之前,您可能希望将1转换为double 在过去, CLOCKS_PER_SEC也对应于粒度,但现代系统似乎只选择一些大的值(Posix需要1000000,无论粒度如何); 这意味着来自clock()连续返回值将“跳转”。

最后,值得注意的是,在VC ++中, clock()被破坏,并返回挂钟时间,而不是CPU时间。 (这可能是历史上的条件;在早期,挂钟时间是可用的,微软的人可能认为有代码依赖于它。)

您可以通过将数量除以CLOCKS_PER_SEC来将时钟周期转换为实时。

请注意,由于C ++ 11更适合测量经过时间的方法是使用std::steady_clock

人钟

返回的值是到目前为止使用的CPU时间。 获取使用的秒数,除以CLOCKS_PER_SEC。 如果使用的处理器时间不可用或无法表示其值,则函数返回值(clock_t)-1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM