スレッド化効率ビュー

インテル® VTune™ プロファイラーのスレッド化効率ビューポイントを使用して、非効率な同期など CPU 利用率の低下を招く原因を特定します。

次のワークフローに従って、スレッド化解析タイプで収集された結果を解析します。

  1. パフォーマンスのベースラインを定義する
  2. 待機時間スピンとオーバーヘッド時間、およびスレッド数メトリックを調査する
  3. タイムラインを調査する
  4. アプリケーションのソースコードを解析
  5. さらに診断と最適化を行うため、ほかの解析タイプを調査

パフォーマンスのベースラインを定義する

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

[スピン時間][オーバーヘッド時間][待機時間]、および[合計スレッド数] を調査してパフォーマンスの問題の主な原因を特定します。

待機時間

待機時間が長いと CPU 利用率が低下します。並列アプリケーションの一般的な問題の 1 つは、スレッドがアプリケーション実行のクリティカル・パス上にある同期オブジェクト (例えば、ロック) を長時間待機することです。コアが十分に利用されず待機が発生すると、並列パフォーマンスは影響を受けます。スレッド解析は、スレッドの待機時間を解析し、同期のボトルネックを検出するのに有効です。

[ボトムアップ] ウィンドウを調べて、最もパフォーマンスへの影響が重大な同期オブジェクトを特定します。状況によりますが、注目しないスレッドがまれにオブジェクトを長時間待機することがあります。通常は、待機時間と待機カウント値の両方が大きい (特に利用率/並行性が低い場合) 待機にチューニングの労力を集中することを推奨します。

デフォルトで、同期オブジェクトは待機時間でソートされます。[利用率ごとの待機時間] カラムヘッダーの ボタンをクリックしてカラムを展開すると、利用率レベルごとの時間分布を表示できます。

[ボトムアップ] または [トップダウン・ツリー] ペインで選択した同期オブジェクトと最も関連性の高いスタックを特定するには、スタックペインのナビゲーション・ボタン を使用します。関連性バーでは、選択した同期オブジェクトで費やされた合計時間に対する、表示されているスタックの関連性を示します。[コールスタック] ペインのドロップダウン・リストから、各種スタックデータを表示することもできます。

最も高い待機時間 (バー形式で表示される場合は最も長い赤いバー) と待機カウント値の同期オブジェクトの待機時間を排除するか、最小化することを検討してください。

ハードウェア・イベントベース・サンプリングとコンテキスト・スイッチ・モードでは、[インアクティブ同期待機時間] で関数をソートします。[呼び出し元/呼び出し先] ペインを使用して、[インアクティブ同期待機時間] が高い待機関数を呼び出しているアプリケーション内の呼び出しサイトを特定します。

スピンとオーバーヘッド時間

スレッド化解析は、ビジー待機や並列ワーク割り当てのオーバーヘッドが原因で、アプリケーションがスレッドランタイムで費やす時間を示します。目標は、アクティブ待機またはタスク・スケジュールで費やされる CPU サイクルを最小限にすることです。スピンとアプリケーション実行のオーバーヘッド時間が長い関数の呼び出すパスを確認し、フラグが示される問題のアドバイスに従って時間を短縮します。

[スピンとオーバーヘッド時間] セクションに表示されるスピン時間は、ユーザーレベル・サンプリングとトレースに基づく待機時間に含まれることがあります。

スレッド数

スレッド化解析では、アプリケーションがマシン上の論理コア数よりも多くのスレッドを実行すると、オーバーサブスクリプションに費やされた時間をフラグ付きで示します。オーバーサブスクリプション状態でスレッドが実行されると、一部のスレッドが他のスレッドを待機したり、コンテキストスイッチの時間が生じるため、CPU 時間が長くなる可能性があります。もう 1 つのよくある問題は、固定数のスレッドで実行することです。これには、コア数が異なるプラットフォームで実行すると、パフォーマンスが低下する可能性があります。例えば、利用可能なコア数よりもはるかに少ないスレッド数で実行すると、アプリケーションの経過時間が長くなる可能性があります。

アプリケーションがオーバーサブスクリプション状態であるか、そしてスレッド数を増やすことでパフォーマンスが向上する可能性があるかを確認するには、[サマリー] ウィンドウで [合計スレッド数] メトリックを使用します。

ハードウェア・イベントベース・サンプリングとコンテキスト・スイッチ・モードでは、[プリエンプション待機時間] メトリックを使用してオーバーサブスクリプションの影響を予測します。ワークスレッドのメトリック値が高いほど、アプリケーションのパフォーマンスに対するオーバーサブスクリプションの影響が大きくなります。スレッドのプリエンプションは、システムで実行される他のアプリケーションやカーネルスレッドとの競合によって発生することもあります。

タイムラインを調査する

[ボトムアップ/トップダウン・ツリー] ウィンドウの下にある、[タイムライン] ペインには、アプリケーションのスレッドの動作と、CPU 利用率メトリックの変化を時系列で示します。データを解析して、問題のある領域を選択し、コンテキスト・メニューのオプションから選択範囲にズームインします。インテル® VTune™ プロファイラーは、スレッド領域の各スレッドの CPU 時間の合計として、全体の [CPU 利用率] メトリックを計算します。最大 [CPU 利用率] 値は、[プロセッサー・コア数] x 100% と等しくなります。

並行性解析の CPU 利用率によるホットスポット

特定の時間フレーム内でアプリケーションがどのように動作しているか理解するには、タイムラインでその範囲を選択して右クリックし、[選択してズームインおよびフィルターイン] を選択します。インテル® VTune™ プロファイラーは、この時間範囲内で使用された関数または同期オブジェクトを表示します。

ユーザーモードのサンプリングやトレース収集モードでは、[タイムライン] で [トランジション] オプションを選択してスレッドの相互作用を調査します。

ハードウェア・イベントベースのサンプリングおよびコンテキスト・スイッチ・モードの場合、[タイムライン] はインアクティブな待機時間の調査に役立ちます。[タイムライン] でインアクティブな時間領域を選択して、コンテキスト・スイッチに対応する [スタック] ペインに待機スタックを表示します。

ソースを解析する

最も長い待機時間と待機カウント値を持つホットな同期オブジェクトをダブルクリックして、関連するソースコード・ファイルを [ソース/アセンブリー] ウィンドウに表示します。[タイムライン] ペインで遷移バーをダブルクリックして、この遷移の呼び出しサイトを開きます。インテル® VTune™ プロファイラーから直接コードエディターを開いて、コードを編集できます。

その他の解析タイプを調査する

関連情報