首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间度量总时间与cpu时间

时间度量总时间与cpu时间
EN

Stack Overflow用户
提问于 2013-06-13 12:07:54
回答 1查看 478关注 0票数 0

我写了一个示例程序来理解C.Below中的时间度量是一个自包含的小示例。我有一个函数do_primes(),它计算主numbers.In ()函数,它位于我调用do_primes()的计时代码之间,并且还休眠20毫秒。我使用struct timeval (我知道它返回时钟时间)来度量时间。还有使用CLOCKS_PER_SEC.Now的cpu_time,据我所知,这表示CPU工作的时间。

程序的输出如下所示。

代码语言:javascript
复制
Calculated 9592 primes.
elapsed time 2.866976 sec. 
cpu time used 2.840000 secs.

正如您所看到的,运行时间和cpu时间之间的差异是

代码语言:javascript
复制
 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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-13 12:20:24

你的理解是正确的。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17079053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档