在我的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()给了我什么,没有任何额外的计算。
答案 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。