C プログラムで選択したループの実行時間を測定して、プログラム (Linux 上) の合計実行時間の何パーセントがこれらのループに費やされているかを確認したいと考えています。パフォーマンスを測定するループを指定できるはずです。ここ数日、いくつかのツール (vtune、hpctoolkit、oprofile) を試しましたが、どれもこれを行うようには見えません。それらはすべて、パフォーマンスのボトルネックを見つけて、それらの時間を表示するだけです。これは、これらのツールがしきい値 (~1ms) を超えた時間のみを保存するためです。したがって、1 つのループの所要時間がそれよりも短い場合、その実行時間は報告されません。
gprof の基本的なブロック カウント機能は、現在サポートされていない古いコンパイラの機能に依存しています。
またはそのようなものを使用して単純なタイマーを手動で作成できますgettimeofday
が、場合によっては正確な結果が得られません。例:
for (i = 0; i < 1000; ++i)
{
for (j = 0; j < N; ++j)
{
//do some work here
}
}
ここで、内側のループで費やされた合計時間を測定したいのでgettimeofday
、最初のループ内に呼び出しを入れる必要があります。そのgettimeofday
ため、それ自体が 1000 回呼び出され、独自のオーバーヘッドが発生し、結果が不正確になります。