インテル® VTune™ Amplifier 2018 ヘルプ

ロックと待機ビューポイント

非効率な同期など Poor な CPU 時間使用率の原因を特定するため、インテル® VTune™ Amplifier のロックと待機ビューポイントを使用します。

ロックと待機のビューポイントで示されるデータを解釈するため、次のステップに従います。

  1. パフォーマンス・ベースラインを定義します。

  2. アプリケーション中のロックと待機を特定します。

  3. タイムラインを検証します。

  4. アルゴリズムの問題を特定します。

  5. ソースを解析します。

  6. その他の解析タイプを試してみます。

ロックと待機を解析するチュートリアル (Linux* (英語) | Windows* (英語)) では、サンプル C++ アプリケーションを使用して並列性を妨げるロックと待機を特定する手法を紹介しています。

パフォーマンス・ベースラインを定義

この解析結果で提供される [Summary (サマリー)] ウィンドウでアプリケーション・レベルのデータを確認することから開始します。最適化の前後の結果を比較するためのベースラインとして経過時間の値を使用します。

経過時間と指定した数の実行スレッドと利用可能な CPU の使用状況を表した [CPU Usage (CPU 使用率)] チャートと [Thread Concurrency (スレッドの並行性)] チャートを確認します。最も長いバーがインテル® VTune™ Amplifier で定義されている OK (許容範囲) または Ideal (理想) 範囲内にあるのが理想的です。

[Summary] に表示される上位の待機オブジェクトをクリックすると、インテル® VTune™ Amplifier は [Bottom-up (ボトムアップ)] ウィンドウを開いてこのオブジェクトをハイライト表示します。

アプリケーション中のロックと待機を特定

パフォーマンスに重大な影響を与える同期オブジェクトは、[Bottom-up] ペインで確認できます。一概にはいえませんが、通常は、これといった特徴のないスレッドがまれにオブジェクトを長時間待機していることがあります。待機時間が長く、待機カウントの多いオブジェクト (特に、CPU 使用率/並行性が Poor (低) のもの) を重点的にチューニングすることを推奨します。

デフォルトでは、同期オブジェクトは待機時間でソートされ、最もクリティカルな同期オブジェクトが最初に表示されます。[Wait Time by Thread Concurrency (スレッドの並行性別待機時間)] 列見出しで ボタンをクリックすると、列を展開して並行性レベルごとの分布を確認できます。

待機時間が最も長い同期オブジェクト (バー形式の場合は赤いバーが最も長いもの) の待機時間と待機カウント値をなくすか、最小限に抑えます。

またインテル® VTune™ Amplifier は、CPU がアクティブである間に同期構造が費やした待機時間を検出します (スピン時間)。スピン時間が、解析中のインテル® アーキテクチャーのプロセッサー・タイプ向けに定義されているしきい値を超えた場合、インテル® VTune™ Amplifier はグリッド内、または [Summary] ウィンドウでそれらの値をハイトライして強調します。

このメトリックからスピンしている同期オブジェクトを見つけます。そして、スピン待機のパラメーターを調整する、ロックの実装に変更する (例えば、ブロッキングでスケジュールされないようにする)、または同期の粒度を調整することを検討してください。

タイムラインを解析

[Bottom-up]/[Top-down Tree (トップダウン・ツリー)] ウィンドウの下部にある [Timeline (タイムライン)] ペインは、時間経過でのアプリケーションのスレッドの動作、および CPU 使用率、GPU 使用率およびスレッドの並行性の変化を表示します。

アプリケーションのスレッドがアクティブに動作している時間は、濃い緑でタイムラインに表示されます。スレッドが特定のオブジェクトを待機している時間が、薄い緑の表示で示されます。待機オブジェクトにマウスをホバーして詳細を確認します。

データを解析するには、問題個所を選択し、コンテキスト・メニューを使用してその領域を拡大します。例えば、次の図では、並行性レベルが低く、遷移の多発により多数の待機が発生していることが分かります。遷移している個所をダブルクリックすると、[Source (ソース)] 表示に切り替わり、そのコード領域を検証することができます。それぞれの待機時間でアプリケーションが何を行っているか理解するには、注目するタイムラインの範囲で [Zoom In and Filter In by Selection (選択を拡大してフィルターイン)] コンテキスト・メニューを選択すると、インテル® VTune™ Amplifier は [Bottom-up] グリッドの関連するオブジェクトをフィルター処理します。[Call Stack (コールスタック)] ペインでは、待機が発生した関数向けに選択されたタイプのコールスタックを自動的に更新します。

アルゴリズムの問題を特定

アプリケーションの呼び出しシーケンスの問題を特定し、関数の呼び出し方法を変更することでパフォーマンスを改善できます。潜在的な問題の場所を特定するには次の方法があります。

ソースを解析

最もホットな同期オブジェクト (最も高い待機時間と待機カウント値) をダブルクリックして、[Source (ソース)]/[Assembly (アセンブリー)] ウィンドウに関連するソースコードを表示します。[Timeline (タイムライン)] ペインで遷移している個所をダブルクリックすると、その遷移のコールサイトが表示されます。インテル® VTune™ Amplifier から直接コードエディターを開き、コードを編集できます。

その他の解析タイプを試してみる

関連情報