时钟滴答声和时钟周期的概念

时间:2014-09-09 11:54:06

标签: c clock

我编写了一个非常小的代码来衡量我的乘法算法所花费的时间:

  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个刻度,这就是为什么我得到零?

4 个答案:

答案 0 :(得分:2)

  

我的第一个问题是:时钟周期和时钟周期之间有区别吗?

是。时钟周期可以是1毫秒或微秒,而时钟周期可以是0.3纳秒。在POSIX系统上,CLOCKS_PER_SEC必须定义为1000000(100万)。请注意,如果无法以微秒分辨率获得CPU测量值,那么clock()的返回值中的最小跳跃将大于1。

  

我的算法是如此之小,以至于差异的结束开始是0.这是否意味着我的代码执行时间小于1滴答,这就是为什么我得到零?

是。为了获得更好的读数,我建议您循环足够的迭代,以便测量几秒钟。

答案 1 :(得分:1)

四是你的第一个问题:时钟滴答是指主系统时钟。它是设备识别的最小时间单位。时钟周期是完整处理器脉冲完成所需的时间。你可以通过以Hz为单位给出的cpu cpeed来识别。 2GHz处理器每秒执行2,000,000,000个时钟周期。

对于你的第二个问题:可能是的。

答案 2 :(得分:1)

从系统角度解决时钟滴答和时钟周期之间的差异

每个处理器都配有一个物理时钟(通常是石英晶体时钟),该时钟以一定的频率(振动/秒)振荡。处理器借助物理时钟产生的中断来跟踪时间,该中断在每个时间段T都会中断处理器。此中断称为“时钟滴答”。 CPU计数自系统启动以来所看到的中断数,并在调用clock()时返回该值。通过对两个时钟滴答值(从clock()获得)进行求和,您将获得在这两个时间点之间看到的中断次数。

大多数现代操作系统将T值编程为1微秒,即物理时钟每1微秒中断一次,这是最低的时钟粒度,大多数物理时钟广泛支持该粒度。以1微秒为T,可以将时钟周期计算为每秒1000000。因此,利用此信息,您可以根据两个时钟滴答值的差值(即两个滴答之间的差异*滴答周期)来计算经过的时间

注意:操作系统定义的时钟周期必须是物理时钟上的<=振动/秒,否则会降低精度

答案 3 :(得分:0)

时钟周期是时钟周期。

时钟周期是计算机处理器或CPU的速度,由振荡器的两个脉冲之间的时间量决定。一般来说,每秒脉冲数越多,计算机处理器处理信息的速度就越快。