我写了一个非常小的代码来测量我的乘法算法所花费的时间:
clock_t begin, end;
float time_spent;
begin = clock();
a = b*c;
end = clock();
time_spent = (float)(end - begin)/CLOCKS_PER_SEC;我在Windows下使用mingw。
我猜end = clock()会在那个特定时刻给我时钟滴答作响。从begin中减去它会得到乘法所消耗的时钟节拍。当我除以CLOCKS_PER_SEC时,我将得到总时间。
我的第一个问题是:时钟节拍和时钟周期之间有区别吗?
我的算法是如此之小,以至于差值end-begin为0。这是否意味着我的代码执行时间不到1个刻度,这就是为什么我的代码执行时间为零?
发布于 2014-09-09 20:13:27
我的第一个问题是:时钟节拍和时钟周期之间有区别吗?
是。时钟节拍可以是1毫秒或微秒,而时钟周期可以是0.3纳秒。在POSIX系统上,必须将CLOCKS_PER_SEC定义为1000000 (100,000)。请注意,如果不能以微秒分辨率获得CPU测量值,则clock()返回值中的最小跳跃将大于1。
我这里的算法很小,所以
-begin的差值是0。这是否意味着我的代码执行时间不到1个刻度,这就是为什么我的代码执行时间为零?
是。为了获得更好的读数,我建议你循环足够的迭代,这样你就可以测量几秒钟以上。
发布于 2014-09-09 20:14:44
四个你的第一个问题:时钟滴答器指的是主系统时钟。它是设备可识别的最小时间单位。时钟周期是一个完整的处理器脉冲完成所需的时间。这个u可以通过你的cpu cpeed来识别,单位是Hz。2 2GHz处理器每秒执行2,000,000,000个时钟周期。
关于你的第二个问题:可能是。
发布于 2020-09-12 03:37:33
从系统的角度回答时钟滴答和时钟周期之间的差异
每个处理器都伴随着一个物理时钟(通常是石英晶体时钟),它以特定的频率(振动/秒)振荡。处理器在物理时钟产生的中断的帮助下跟踪时间,物理时钟在每个时间周期T中断处理器。这个中断被称为“时钟滴答”。CPU计算自系统启动以来它所看到的中断次数,并在调用clock()时返回该值。通过取两个时钟节拍值之间的差值(从clock ()获得),您将获得在这两个时间点之间看到的中断次数。
大多数现代操作系统将T值编程为1微秒,即物理时钟每隔1微秒中断一次,这是大多数物理时钟广泛支持的最低时钟粒度。当T为1微秒时,时钟周期可计算为每秒1000000。因此,有了这些信息,您就可以计算出两个时钟节拍值的差值所经过的时间,即两个节拍*节拍周期之间的差
注意:操作系统定义的时钟周期必须是物理时钟上的<=振动/秒,否则会有精度损失
https://stackoverflow.com/questions/25743995
复制相似问题