2

アプリケーションがスレッド数に比例してスケーリングするという問題があります (デュアル コア CPU では、800 スレッドで 400 スレッドのパフォーマンスが 2 倍になると考えてください)。そして、私の直感は、スレッドがスリープしているかブロックされていることを教えてくれます...しかし、callgrindでそれを見ることはできません。

同様に、callgrind は関数の時間、またはデータを作成するためにスレッドがアクティブだった時間を測定します。私が何を尋ねるかが明確でない場合...スレッドは

i ++;

2秒間、その後

sleep(1);//thread will not be scheduled to run for min 1 second...  

...i++コール グラフの約 100% または約 66% になります。

4

1 に答える 1

1

Valgrindは、リアルタイムの統計ではなく、ユーザーの時間の統計を収集します。したがって、スレッドが相互に割り込んでいる場合、Valgrindには表示されません。取得するのは、各関数の実行に費やされた実際の時間だけです。

于 2012-02-06T23:56:31.050 に答える