time
より正確になるコマンドによって報告されるように、sysまたはusertimeに相当するものを提供するメソッドはありません。コマンドの見かけの精度の多くは、time
そのままでは偽の精度です。
これを処理するための手法は、これらのコードスニペットを何千回も呼び出すタイトなループに入れ、特定のループがそこからどれくらいの時間を要するかを把握することです。それでも、実験を数回繰り返して、最も短い時間を選択する必要があります。
これは、精度が誤っている理由と、それが何を意味するのかを説明するアナロジーです。ストップウォッチを使用して、レースの開始時と計時されている人がフィニッシュラインを超えたときに手動でボタンを押してレースの計時を行う人がいるとします。おそらくあなたのストップウォッチは100分の1秒まで正確です。しかし、ボタンを押す人の反応時間によってもたらされるエラーによってその精度が小さくなっているため、その精度は誤りです。
これは、おそらくマイクロ秒単位の精度が得られる理由と非常によく似てtime
いますが、実際には精度が大幅に低くなります。特定の時点で特定のシステムで多くのことが起こっており、それらすべてが計算にエラーをもたらします。ネットワークIOまたはディスクIOからの割り込み、スケジューラを実行するためのタイマー割り込み、他のプロセスがL1またはL2CPUキャッシュに対して行うこと。それはすべて合計します。
シミュレートされたCPUでプログラムを実行するようなものを使用するとvalgrind
、CPUサイクル数に対して一見正確な数値を得ることができます。しかし、その精度は、現実の世界で経験することではありません。私が最初に説明した手法を使用し、これらのタイミングがあいまいになる可能性があることを受け入れる方がよいでしょう。