在 Ubuntu 中获取 CPU 时间

Getting CPU time in Ubuntu?

本文关键字:CPU 时间 获取 Ubuntu      更新时间:2023-10-16

我有一个关于在 Ubuntu 12.04 上测量 CPU 时间的问题。

我想在某个循环中使用 CPU 时间作为停止条件。最好的方法是什么?

while(....)
{
    //main part
    // get CPUTIME
    if(CPUTIME>= Given_Time)
    {
        break;         
    }
}

1)我可以用clock(),如果我不太在乎时间的分辨率。

time_t begin=clock();
....
time_t end=clock();
CPUTIME=(double)(end-begin)/(double)(CLOCKS_PER_SEC);

但是,time_t许多溢出,因为运行时间可能很长(超过一个小时)。如何解决此问题?

2)第二个选项是使用getrusage(int who, struct rusage *usage)在循环中调用此函数是否成本太高?

3)第三种选择是使用int clock_gettime(clockid_t clk_id, struct timespect *tp)到目前为止,这是我选择的最佳选择。

任何建议和意见都会有所帮助。

根据循环运行的速度,您可能不希望每个周期都调用检查函数。也许添加一个循环计数器并仅在以下情况下检查 CPU 时间,例如,(i % 1000) == 0 .

回答你的问题:我个人会使用clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...),因为librt,这个函数所在的库,是专门为这样的任务而制作的。但是,没有理由不能使用其他两个;您可以通过检测值何时换行并有一个单独的计数器来计算其换行次数,从而轻松检测带有clock()溢出。