【问题标题】:Getting CPU time in Ubuntu?在 Ubuntu 中获取 CPU 时间?
【发布时间】:2012-06-16 02:57:38
【问题描述】:

我有一个关于在 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) 到目前为止,这是我选项中的最佳选择。

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

【问题讨论】:

    标签: c++ ubuntu-11.10


    【解决方案1】:

    根据循环运行的速度,您可能不想在每个循环中调用检查函数。也许添加一个循环计数器并仅在 (i % 1000) == 0 等情况下检查 CPU 时间。

    回答您的问题:我个人会使用clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...),因为此函数所在的库librt 是专门为此类任务而设计的。但是,没有理由不能使用其他两个。您可以使用clock() 轻松检测溢出,方法是检测值何时换行并使用单独的计数器计算其换行次数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      相关资源
      最近更新 更多