时间测量总时间vs cpu时间

时间:2013-06-13 04:07:54

标签: c performance time

我写了一个示例程序来理解C.Below中的时间测量是一个小的自包含的例子。我有一个函数do_primes()来计算素数。在定时代码之间的main()函数中我调用do_primes()我也睡了20毫秒。我是使用struct timeval(我理解它返回时钟时间)和cpu_time使用CLOCKS_PER_SEC.Now测量时间,据我所知,这表示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;
}

1 个答案:

答案 0 :(得分:3)

您的理解是正确的。

额外的6.976ms可能根本没有任何意义,因为clock()函数可能只有10ms的分辨率。

相关问题