【发布时间】:2020-08-26 15:18:02
【问题描述】:
我希望能够对应用程序特定部分的执行时间进行计时。
这是一个简化的代码来显示我无法理解的内容:
#include <stdio.h>
#include <time.h>
void fun(){
double result = 0;
for (int i = 1; i<200;i++){
for (int j = 1; j<200;j++){
result += i/j; // Random mathematical expression
}
}
}
int main(int argc, char const *argv[])
{
clock_t start, end;
start = clock();
fun();
end = clock();
clock_t clocks_taken = (end - start);
double total_time = ((double)(end - start)/CLOCKS_PER_SEC)*1000; //millisec
printf("Clock cycles: %d. Total time: %lf ms", clocks_taken, total_time);
}
给出输出:
Clock cycles: 0. Total time: 0.000000 ms
据我所知,时钟周期是处理器的一次执行,而嵌套的 forloop 应该需要数百个周期?还是我弄错了?
即使当前示例没有,我也需要能够测量大约需要 1 毫秒的任务的执行时间。如果重要的话,我正在 Windows 中构建和运行应用程序。
【问题讨论】:
-
调试这个过程会发生什么?
start、end、clocks_taken、total_time的值是多少? -
@Dominique 据我所知,使用 printf,
end和start每次尝试都具有相同的值,在实际应用中,它们有时会相差一个,但不会超过这个值。 -
int fun()和return result;然后printf ("result: %d\n", fun());以确保您的函数没有被完全优化掉——它没有副作用。 -
您是否尝试过使用大到需要等待整秒钟才能完成整个过程的值?
-
@paddy 哦,不是吗?我读到:“C 库函数clock_t clock(void) 返回自程序启动以来经过的时钟节拍数”结合“时钟节拍通常指的是主系统时钟,它以66 MHz 运行。”也许我将它视为一个单一的指令是错误的,但 66MHz 应该足以满足我的需要。