質問

今私はgettimeofdayのを使用して、ファイルをロードし、tv_usecのでCPU時間を追跡しています。

私の結果は、私は280Sに250年代を取得しますが、時には300のまたは500の、変化します。ノー成功を収めてはusleepと睡眠(0)を書いて、(1)。時間はまだ大幅に異なります。私は睡眠が(1)(Linuxでは秒、いないミリ秒で、Windowsのスリープは)それを解決しているだろうと思いました。どのように私はテストのために、より一貫した方法で時間を追跡することができますか?私は、測定を開始する前に、はるかに大きなテストデータと、より複雑なコードを持ってまで、多分私は待つべき?

役に立ちましたか?

解決

Linuxの(および一般的なPOSIX)の高REZ時間の

現在推奨インターフェースにclock_gettimeあります。 manページを参照してください。


clock_gettime(CLOCK_REALTIME, struct timespec *tp) //  for wall-clock time
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, struct timespec *tp) //  for CPU time

しかし、manページをお読みください。あなたはPOSIXがそう言うので、私は推測する、-lrtでリンクする必要があることに注意してください。たぶん、自分のにclock_gettimeを定義した古いプログラムのために、-lcにシンボルの競合を回避するには?しかし、動的LIBSは弱いシンボルを使用...

最高のスリープ機能はにnanosleepです。これは、信号と周りの混乱やはusleepのような任意のがらくたません。ちょうど眠り、および他の副作用を持っていないように定義されています。あなたが早期に(例えば信号からの)目が覚めたので、あなたは、必ずしも別の時間関数を呼び出すために持っていない場合、それはあなたに伝えます。

とにかく、あなたは苦労システムコールを伴う短い何かの担当者をテストする必要があるとしています。変化のための機会の膨大な量があります。例えば(;あなたはまだあなたのタイムスライスを使用していません、あなたのプロセスはまだ始まったばかりならば可能性は低い)スケジューラは、いくつかの他の作業のニーズがやっていることを決めることができます。 CPUキャッシュ(L2とTLB)が容易に可能である。

あなたは、マルチコアマシンとあなたが最適化しているコードのシングルスレッドのベンチマークを持っている場合は、

、あなたはそれをあなたのコアの1つに固定のリアルタイム優先順位を与えることができます。あなたが割り込みを処理していない、またはそれが行われるまで、キーボード(および他のすべて)がロックアウトされるコアを選択していることを確認します。 (リアルタイムPRIOを設定するため)とCHRT(1つのCPUにピン留めのため)タスクセットを使用します。 私はこのトリックでGMP-develのに送信され、このメールを参照してください。 http://gmplib.org/list-archives/gmp- develの/ 2008年3月/ 000789.htmlする

そうそう、最も正確なタイミングのために、あなたは(のx86 / AMD64上で)自分をRDTSC使用することができます。あなたはベンチングしているもので、他のシステムコールを持っていない場合、それは悪い考えではありません。あなたの機能を入れてベンチマークフレームワークをつかみます。 GMPはかなりまともなものを持っています。それは多分しかし、GMPにない機能をベンチマーキングのためによく設定し、mpn_whateverと呼ばれていません。私は覚えていない、それは一見の価値があります。

他のヒント

あなたはそれがファイルをロードするためにかかる時間を測定しようとしていますか?通常、あなたはすでにかなり速いですコードの一部のビット(サブ秒)をテストし、パフォーマンスしている場合、その後、あなたは同じコードの回数を(たとえば千または百万円)を繰り返すことになるでしょう、時間が全体の多くは、反復の数で総時間を分割します。

私はあなたのために睡眠を()を使用しているものはかなりわからないんだけど、と述べました。あなたはあなたがするつもりかの例を投稿することができますか?

私は、forループでそのコードを置くことをお勧めします。 1000万回の反復の上にそれを実行します。そこだけ少数の命令をやっている場合はこれで問題だが、それが役立つはずです。

大規模なデータはもちろんの助けを設定します。

睡眠は、CPUからあなたのスレッドをdescheduleしようとしています。これは、正確な精度で時間をカウントしません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top