0

Ubuntu12.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実行時間が長くなる可能性があるため(1時間以上)、多くの場合オーバーフローします。この問題を解決するにはどうすればよいですか?

2)2番目のオプションは使用getrusage(int who, struct rusage *usage) していますループでこの関数を呼び出すのにコストがかかりすぎますか?

3)3番目のオプションは使用することですint clock_gettime(clockid_t clk_id, struct timespect *tp) これまでのところ、これは私のオプションの最良の選択です。

どんな提案やコメントも役に立ちます。

4

1 に答える 1

1

ループの実行速度によっては、サイクルごとにチェック関数を呼び出さない場合があります。おそらく、ループカウンターを追加し、たとえば。の場合にのみCPU時間をチェックします(i % 1000) == 0

あなたの質問に答えるために:私は個人的に使用しますclock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...)。なぜならlibrt、この関数が存在するライブラリは、このようなタスクのために特別に作成されたからです。ただし、他の2つを使用できない理由はありません。clock()値がいつラップするかを検出し、ラップする回数をカウントする別のカウンターを用意することで、オーバーフローを簡単に検出できます。

于 2012-06-16T04:50:23.563 に答える