我正在使用 clock() 来测量算法的 CPU 时间量。
代码如下:
start_time = clock();
//code to be timed
.
end_time = clock();
elapsed_time = (end_time - start_time)*1000 / CLOCKS_PER_SEC;
printf("Time taken %d seconds %d milliseconds\n", elapsed_time/1000, elapsed_time%1000 );
但结果是“0 秒 -175 毫秒”。我不明白为什么。 似乎“1 秒 349 毫秒”真的可以花费 10 分钟或更长时间。 这很常见吗?
最佳答案
fork 是一种特殊情况,这种类型的代码会导致负时间。原因之一是,clock()
将返回自程序启动以来的时钟滴答数。
提醒一下,start_time
中的值将被复制到子进程。
对于父进程,时间应该是正数。因为
start_time
和end_time
的时钟滴答计数是针对同一个进程的。对于子进程,由于它只在
fork()
之后启动,clock()
将返回时钟的编号勾选程序从这一点开始运行。fork()
之前的时间不记录。由于计算时钟滴答的起始引用不同:
start_time
是从 parent 进程开始到第一个clock()
的时钟滴答数
end_time
是从 child 进程开始到第二个clock()
) 的时钟滴答数
这可能会导致负面结果。如果子进程运行的时间足够长以超过父进程启动的时间,也可能会产生积极的结果。
编辑
我不确定预期的时间是多少,但是如果你想计算:父进程从开始到结束的时钟滴答声,以及子进程从 fork()
之后到结束的时钟滴答声,然后修改您的代码以在子进程中使用 clock()
的新值覆盖 start_time
。或者您可以将 start_time
设置为 0。
关于c++ - 为什么使用 clock() 在测量 CPU 时间时得到负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10808771/