「スレッド使用量」インジケータには、プログラムで使用されているスレッドの数と、スレッドがタスクを続行するためにロックを取得するまで待機する必要がある時点が示されます。このデータはマルチスレッドのアプリケーションで、コストのかかる待ち時間を回避するためにスレッドの同期を行う必要がある場合に有用です。
「スレッド使用量」インジケータに、プロジェクトの実行時に実行されたスレッドの数が示されます。時間スライダを開始時点まで戻し、Parallel Demo が開始するまでスレッドの数が 1 であることを確認します。次の図ではこれは 8:07 であり、この時点で 1 から 32 スレッドに急増しています。
表示スライダの終了ポイントハンドルを、Parallel Demo の開始位置に移動します。
同期間の「CPU 使用率」インジケータおよび「メモリー使用」インジケータでは、CPU 時間とメモリーを使用する何らかのアクティビティーを実行している 1 つのスレッドが示されています。これは、メインスレッドがファイルへの書き込みを行い、いくつかの計算を連続して行う、Sequential Demo の部分に相当します。CPU 使用率とメモリー使用は、どちらもユーザーが Enter を押すのをプログラムが待機している間に減少し、スレッド数は 1 のままになります。
タイムスライダを右にスライドさせ、スレッドが増加する 2 か所のポイントを確認します。
8:07 でのスレッドの増加は、プロジェクト実行の Parallel Demo 部分に対応しています。メインスレッドは、フィルへの書き込みと並列計算実行を処理するため、追加スレッドを開始します。メモリー使用量と CPU 使用率が増加しているが、2 つのタスクがかなり短い期間で完了しています。
Parallel Demo スレッドの終了後、スレッド数が 1 に戻り、メインスレッドはユーザーが Enter を押すのを待機します。スレッド数は、プログラムの Pthread Mutex Demo 部分の実行時にふたたび増加します。
Pthread Mutex Demo 部分でロック待機がオレンジ色で表示されています。Pthread Mutex Demo では、複数のスレッドによる特定の関数へのアクセス競合を防ぐために相互排他ロックが使用されますが、これがスレッドがロックの取得を待機する原因です。
「同期の問題」ボタンをクリックし、プロジェクトのスレッドロックに関する詳細を表示します。「スレッド同期の詳細」ウィンドウが開き、相互排他ロックを取得するために待機する必要がある関数が一覧表示されます。また、関数が待機に費やすミリ秒での秒数のメトリックと、関数がロックを待機する必要のある回数が表示されます。この例では、同期の問題は発生していません。
プログラムの実行中に「同期の問題」ボタンをクリックした場合、リフレッシュボタン
をクリックして表示を更新し、最新のスレッドロック情報にする必要がある場合があります。
「待ち時間」列をクリックし、待機時間が長い順に関数をソートします。
「ロック待機」列をクリックし、関数内でスレッドが待機した回数の順に関数をソートします。
関数をダブルクリックすると、その関数がメモリー位置をロックしているソースファイルがエディタで開きます。「待ち時間」と「ロック待機」のメトリックがソースファイルの左の列に表示されます。メトリックの上にマウスポインタを合わせると、「スレッド同期の詳細」ウィンドウの表示内容と一致する詳細が表示されます。
メトリックを右クリックして「プロファイラメトリックを表示 (Show Profiler Metrics)」を選択解除します。これでメトリックはどのプロファイルツールのソースエディタにも表示されなくなります。メトリックを再度表示するには、IDE メニューの「表示」を選択し、「プロファイラメトリックを表示」を選択します。