如何解释clock()?

时间:2014-07-28 08:18:42

标签: c++ time clock

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

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

现在用C ++定义内部clock()是什么?如果我有1.0 GHz的CPU A和2.0 GHz的CPU B并且在它们上运行相同的代码,那么CPU A和B需要多少个时钟才能完成?时钟()是否符合"完成工作"?或者它真的是"时间"?

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

3 个答案:

答案 0 :(得分:2)

您可以通过将金额除以CLOCKS_PER_SEC来将时钟刻度转换为实时。

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

答案 1 :(得分:2)

clock()函数应该返回最接近的函数 表示所使用的CPU时间,与时钟无关 CPU的spead。 CPU的时钟速度可能在哪里 介入(但不一定)是粒度;更多 但是,时钟的粒度通常取决于某些外部因素 时间源。 (在遥远的过去,它往往是基于 电源线频率,粒度为1/50或1/60 一秒钟,取决于你在哪里。)

要以秒为单位获得时间,请除以CLOCKS_PER_SEC。是 但是,我知道clock()CLOCKS_PER_SEC都是。{1}} 积分值,所以划分是不可或缺的。你可能想要 在进行除法之前将1转换为double。在过去, CLOCKS_PER_SEC也符合粒度,但是 现代系统似乎只是选择了一些大的价值(Posix 无论粒度如何,都需要1000000;这意味着 来自clock()的连续返回值将“跳转”。

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

答案 2 :(得分:0)

来自man clock

  

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