4

私は次のような状況にいます:

(PHP および C++) コードの小さなスニペットの sys- および usertime を特定したいと考えています。もちろん、Linux で "time" バイナリを使用することもできますが、これらのスニペットが非常に高速に実行されるという事実を考えると、"time" の通常の (または詳細な) 出力では、私の目的には十分ではありません。「時間」の精度はミリ秒単位ですが、マイクロ秒が必要です。またはさらに良い: ナノ秒。

誰かが私のためにこれを行うことができるソフトウェアを教えてもらえますか? walltime に関するものを見つけましたが、興味があるのは sys- と usertime です。

前もって感謝します!

ところで:Ubuntu 10.10 64ビットを実行しています

4

3 に答える 3

3

timeより正確になるコマンドによって報告されるように、sysまたはusertimeに相当するものを提供するメソッドはありません。コマンドの見かけの精度の多くは、timeそのままでは偽の精度です。

これを処理するための手法は、これらのコードスニペットを何千回も呼び出すタイトなループに入れ、特定のループがそこからどれくらいの時間を要するかを把握することです。それでも、実験を数回繰り返して、最も短い時間を選択する必要があります。

これは、精度が誤っている理由と、それが何を意味するのかを説明するアナロジーです。ストップウォッチを使用して、レースの開始時と計時されている人がフィニッシュラインを超えたときに手動でボタンを押してレースの計時を行う人がいるとします。おそらくあなたのストップウォッチは100分の1秒まで正確です。しかし、ボタンを押す人の反応時間によってもたらされるエラーによってその精度が小さくなっているため、その精度は誤りです。

これは、おそらくマイクロ秒単位の精度が得られる理由と非常によく似てtimeいますが、実際には精度が大幅に低くなります。特定の時点で特定のシステムで多くのことが起こっており、それらすべてが計算にエラーをもたらします。ネットワークIOまたはディスクIOからの割り込み、スケジューラを実行するためのタイマー割り込み、他のプロセスがL1またはL2CPUキャッシュに対して行うこと。それはすべて合計します。

シミュレートされたCPUでプログラムを実行するようなものを使用するとvalgrind、CPUサイクル数に対して一見正確な数値を得ることができます。しかし、その精度は、現実の世界で経験することではありません。私が最初に説明した手法を使用し、これらのタイミングがあいまいになる可能性があることを受け入れる方がよいでしょう。

于 2010-11-21T15:29:56.740 に答える
0

clock_gettime()ナノ秒の解像度が得られます。

于 2010-11-21T20:09:56.730 に答える
0

gettimeofday()マイクロ秒の解像度が得られます。

于 2010-11-21T15:19:32.957 に答える