インテル® VTune™ プロファイラー・ユーザーガイド

スレッド化解析

スレッド化解析を使用して、アプリケーションが利用可能なプロセッサー計算コアをどれだけ効率良く使用しているか特定し、スレッド化ランタイムの非効率性、またはプロセッサーの利用効率を妨げるスレッドの同期競合を調査します。

インテル® VTune™ プロファイラーは、スレッド化効率の主な評価として有効な CPU 利用率メトリックを使用します。このメトリックは、アプリケーションが利用可能な論理コアをどのように利用しているかに基づいています。スループット・コンピューティングでは、通常、物理コアごとに 1 つの論理コアを使用します。

スレッド化解析の以下のメトリックは、CPU 利用率が低い理由を示します。

スレッド化解析は、スレッド待機時間の収集と解釈に違いがある 2 つの収集モードを提供します。

どのように動作するか: ユーザーモード・サンプリングとトレース

ユーザーモード・サンプリングとトレース収集では、インテル® VTune™ プロファイラーはスレッド化およびブロッキング API をインストルメントして、実行中に呼び出しをインターセプトし、同期オブジェクトを検出してスレッド相互作用フローを構築します。このモードを使用することで、各同期オブジェクトがアプリケーションに与える影響を推測し、アプリケーションが同期オブジェクトやブロッキング API で待機している時間を把握できます。この解析は、タイムライン・ビューで同期オブジェクトの解放と取得によるスレッド間の実行フローの遷移を含む、スレッドの相互作用を示します。

このモードがアプリケーションの実行に大きなオーバーヘッドをもたらす場合、干渉の少ない方法で待機時間を収集するハードウェア・イベントベース・サンプリングとコンテキスト・スイッチ・モードを試してください。

どのように動作するか: ハードウェア・イベントベース・サンプリングとコンテキスト・スイッチ

マルチタスク・オペレーティング・システムは、すべてのソフトウェア・スレッドをタイムスライスで実行します (スレッド実行クォンタム)。ハードウェア・イベントベース・サンプリングとコンテキスト・スイッチ・モードでは、スレッドがプロセッサー上にスケジュールされ、プロセッサーからスケジュール・アウトされるたびに (スレッドクォンタム境界で) プロファイラーが制御を取得します。このモードはスレッドが非アクティブとなった原因を判断します。明示的な同期要求またはスレッドクォンタムの終了 (オペレーティング・システムのスケジューラーが現在のスレッドをプリエンプトして別の優先度の高いスレッドを実行する場合) が原因です。

スレッドが非アクティブであった期間を測定します。これは、非アクティブ待機時間と呼ばれます。非アクティブ待機時間は、非アクティブの原因によって区分されます。

コンテキスト・スイッチ情報はコールスタックで収集されるため、呼び出しパスと待機関数による非アクティブな待機時間を原因を調査できます。ハードウェア・イベントベースのサンプリングとコンテキスト・スイッチ・モードは、同期オブジェクトや I/O 操作によって待機するコード内の場所を示します。

ハードウェア・イベントベース・サンプリングとコンテキスト・スイッチ・モードは、ハードウェア・イベントベース・サンプリング収集を使用し、システム上で実行されるすべてのプロセスを解析して、システム全体のパフォーマンスに関連するコンテキスト・スイッチ・データを提供します。Linux* システムでは、カーネルバージョン 4.4 以降でドライバーを使用しない Perf ベースの収集を使用して、非アクティブな待機時間を収集できます。非アクティブ時間の原因は、カーネル 4.17 以降で利用できます。

32 ビット Linux* システムでは、インテル® VTune™ プロファイラーはハードウェア・イベントベース・サンプリング・モードにドライバーを使用しない Perf ベースの収集を使用します。

解析の設定と実行

次のようにスレッド化解析のオプションを設定します。

必要条件: プロジェクトを作成して解析ターゲットを指定します。

  1. (スタンドアロン GUI)/ (Visual Studio* IDE) で、インテル® VTune™ プロファイラーのツールバーにある [解析の設定 (Configure Analysis)] ボタンをクリックします。

    [解析の設定] ウィンドウが開きます。

  2. [どのように] ペインで、 実行する解析タイプを選択ボタンをクリックして、[スレッド化] を選択します。

  3. 収集オプションを設定します。

    ユーザーモード・サンプリングとトレース・モード

    同期オブジェクトを解析するためユーザーモード・サンプリングとトレース収集を行う際に選択します。この収集モードのサンプリング間隔は 10 ミリ秒に固定されています。サンプリング間隔を変更するには、[コピー] ボタンをクリックしてカスタム解析設定を作成します。10 ミリ秒未満の場合、ハードウェア・イベントベース・サンプリングとコンテキスト・スイッチ・モードを使用します。

    ハードウェア・イベントベース・サンプリングとコンテキスト・スイッチ・モード

    ハードウェア・イベントベース・サンプリングとコンテキスト・スイッチの収集を有効にする際に選択します。

    [CPU サンプリング間隔 (ミリ秒)] では、CPU サンプリングの間隔をミリ秒単位で指定します。ハードウェア・イベントベース・サンプリング・モードで指定可能な値は、0.01 - 1000 です。デフォルトで 1 ミリ秒が使用されます。

    収集オプションを変更する場合、右にあるオーバーヘッド分布図に注意してください。選択したオプションにより、発生するオーバーヘッドは動的に変化します。

    [詳細] ボタン

    この解析タイプのデフォルトの編集不可設定のリストセクションを、展開/折りたたみます。解析の設定を変更または設定の追加を有効にするには、既存の事前定義設定をコピーしてカスタム設定を作成する必要があります。インテル® VTune™ プロファイラーは、解析タイプ設定の編集可能なコピーを作成します。

    下部にある コマンドライン・ボタンを使用して、この設定のコマンドラインを生成できます。

  4. 解析を実行するには 開始ボタンをクリックします。

データを表示

スレッド化解析の結果は、次のウィンドウ/ペインで構成される [スレッド化効率] ビューポイントに表示されます。

次にすることは?

  1. [サマリー] ウィンドウから開始して、アプリケーションの有効な CPU 利用率を調査し、同期や並列ワーク割り当てのオーバーヘッドに関連する低い利用率の原因を特定します。フラグが付けられた問題に関連付けられたリンクをクリックすると、詳しい情報が表示されます。例えば、[上位の待機オブジェクト] テーブルの同期オブジェクトをクリックすると、[ボトムアップ] ウィンドウのそのオブジェクトに移動します。

  2. 待機とシグナルスタック、およびタイムライン上の遷移を使用して、スレッド統合同期オブジェクトを解析します。スレッド化ランタイムに費やされた CPU 時間を調査して、非効率な利用率を分類します。

  3. CPU 利用率のボトルネックを排除し、アプリケーションの並列処理を改善するようにコードを修正します。

    待機中のシステム利用率が低い (赤いバー)、長い待機時間のオブジェクトにチューニング作業を集中します。並列処理の追加、ワークバランスの調整、または競合の削減を検討します。実行中のスレッド数が論理コア数と等しくなると、理想的な利用率 (緑のバー) になります。

  4. 解析を再度実行して、比較モードで最適化を検証し、改善の余地がある領域を特定します。

詳細と解釈のヒントについては、「スレッド化効率ビュー」を参照してください。

関連情報