2

時間を見積もるために推奨される方法は、clock() 関数を使用してから、CPU サイクル数をサイクル/秒で割ることです。

私の問題は、実行しようとしているプログラムに時間がかかることです (数時間)。これは、(long int を返す) clock() 関数がガベージ値を返すことを意味します (max long int がこれに対して十分な大きさではないため)。

提案はありますか(内部ループの時間を見積もり、それらを追加することは別として)?

long t1 = clock();
function();
long t2=clock();

time = ((double)t2 - t1) / CLOCKS_PER_SEC
4

7 に答える 7

5

Linux / Unix で実行している場合は、次のように言えます。

time my_process
于 2010-11-12T21:48:40.023 に答える
3

問題をパーセンテージエラーで考えてみてください。

プログラムの実行に何時間もかかる場合 (たとえば 4 時間...つまり 14,400 秒)、1/2% エラーは 72 秒、つまり 1 分よりわずかに長くなります。

言い換えれば、1/2 パーセント以内の正確な答えを得るには、最も近い分まで時間を計るだけで済みます。ハンドヘルド ストップウォッチが 1 秒以内、または 1/10 秒以内でさえ計測できると仮定すると、誤差は無視できるほど小さくなります。

私のポイントは、秒タイマーまたはハンドヘルドストップウォッチを使用するだけで、プログラムの正確な測定値を取得できるということです.

于 2010-11-12T21:49:40.423 に答える
1

プログラムが長時間実行されている場合、1 秒未満の精度はおそらく特に重要ではありません。その場合、なぜ電話しないのtime()ですか?

于 2010-11-12T21:49:24.083 に答える
0

精度 (queryPerformanceTimer のような win 呼び出しによって与えられる) が重要でない場合は、getTimeofTheDay のようなアプローチ (@osgx によって提案される) を使用します。

于 2010-11-12T22:29:42.657 に答える
0

ブーストタイマーはうまく機能します。

タイマー ライブラリは、経過時間を測定するための timer クラス、経過時間を報告するための progress_timer クラス、および目標に向けた進行状況を表示するための progress_display クラスを提供します。

于 2010-11-12T21:48:54.347 に答える
0

gettimeofday()

#include <sys/time.h>

int gettimeofday(struct timeval *tv, NULL);

関数 gettimeofday() および settimeofday() で時刻を取得できます。tv 引数は struct timeval です ( で指定):

struct timeval {
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};

time_t は少なくとも 32 ビットであるため、時間を格納できます。

于 2010-11-12T21:50:04.460 に答える