我写了一个示例程序来理解C.Below中的时间度量是一个自包含的小示例。我有一个函数do_primes(),它计算主numbers.In ()函数,它位于我调用do_primes()的计时代码之间,并且还休眠20毫秒。我使用struct timeval (我知道它返回时钟时间)来度量时间。还有使用CLOCKS_PER_SEC.Now的cpu_time,据我所知,这表示CPU工作的时间。
程序的输出如下所示。
Calculated 9592 primes.
elapsed time 2.866976 sec.
cpu time used 2.840000 secs.正如您所看到的,运行时间和cpu时间之间的差异是
0.026976 seconds OR 26.976 milliseconds.
1) Are my assumptions correct?
2) 6.976 milliseconds is accounted for my the scheduler switch delay?
#include <stdio.h>
#include <sys/time.h>
#include <time.h>
#define MAX_PRIME 100000
void do_primes()
{
unsigned long i, num, primes = 0;
for (num = 1; num <= MAX_PRIME; ++num)
{
for (i = 2; (i <= num) && (num % i != 0); ++i);
if (i == num)
++primes;
}
printf("Calculated %ld primes.\n", primes);
}
int main()
{
struct timeval t1, t2;
double elapsedTime;
clock_t start, end;
double cpu_time_used;
int primes = 0;
int i = 0;
int num = 0;
start = clock();
/* start timer*/
gettimeofday(&t1, NULL);
/*do something */
usleep(20000);
do_primes();
/* stop timer*/
gettimeofday(&t2, NULL);
end = clock();
/*compute and print the elapsed time in millisec*/
elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0; /* sec to ms*/
elapsedTime += (t2.tv_usec - t1.tv_usec) / 1000.0; /* us to ms */
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
printf("elapsed time %f sec. \ncpu time used %f secs.\n",(elapsedTime/1000),cpu_time_used);
return 0;
}发布于 2013-06-13 12:20:24
你的理解是正确的。
额外的6.976ms可能没有任何意义,因为clock()函数可能只有10ms的分辨率。
https://stackoverflow.com/questions/17079053
复制相似问题