【发布时间】:2014-11-02 20:06:22
【问题描述】:
我编写了一个非常小的代码来测量我的乘法算法所花费的时间:
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 个滴答,这就是我得到零的原因?
【问题讨论】:
-
“时钟周期”一词从何而来?我在gnu.org/software/libc/manual/html_node/CPU-Time.html 找到的文档不使用这样的术语,只有记号。
-
@Suma 时钟周期是指 CPU 速度。 2 GHz 处理器每秒有 2G (2 * 10^9) 个时钟周期。它与时钟滴答无关。
-
clock() 与 CPU 时钟周期没有任何关系。如果您使用 MinGW,则使用 QueryPerformanceCounter() 来获得适合分析代码的非常高分辨率的计时器。然而,单次乘法的计时超出了 QPF 的范围,对于通常需要单个 cpu 周期的操作,您无法获得有意义的结果。也没有用。您只能通过多次重复该指令来获得估计。