コンカレンシー解析は、アプリケーション中で時間を費やしている場所と、利用可能なプロセッサー時間の活用状況を示します。次のビューポイントを使用して、収集したコンカレンシー・データを解釈します。
[Hotspots] ビューポイントでは、CPU 時間を最も費やしているプログラムユニットを特定できます。
[Hotspots by CPU Usage (CPU 使用率別 hotspot)] ビューポイントでは、CPU 時間を最も費やしているプログラムユニットを特定し、CPU 時間が効率良く使用されたかどうか確認できます。
[Hotspots by Thread Concurrency (スレッドのコンカレンシー別 hotspot)] ビューポイントでは、アプリケーションの論理スレッドがシステムの CPU に効率良くスケジュールされたかどうか確認できます。
[Locks and Waits (ロックと待機)] ビューポイントでは、CPU コアが十分利用されずにスレッドが同期オブジェクト (ロック)、I/O、タイマーで長時間待機しているなど、CPU 時間が効率良く活用されていない箇所を特定できます。
コンカレンシー解析で提供されるパフォーマンス・データを解釈するには、次の操作を行います。
- パフォーマンス・ベースラインを定義します。
[Summary (サマリー)] ウィンドウまたはこの解析結果で提供されるアプリケーション・レベルのデータから確認します。最適化の前後の結果を比較するため、主要な指標およびベースラインとして経過時間を使用します。
経過時間と指定した数の実行スレッドと利用可能な CPU の使用状況を表した [CPU Usage (CPU 使用率)] チャートと [Thread Concurrency (スレッドのコンカレンシー)] チャートを確認します。最も長いバーがインテル(R) VTune(TM) Amplifier XE で定義されている OK (許容範囲) または Ideal (理想) 範囲内にあるのが理想的です。
- コンカレンシーが低く、CPU を十分利用していない関数を特定します。
利用可能なプロセッサー時間を効率良く活用していない関数を特定するには、[Bottom-up (ボトムアップ)] ペインを確認します。
CPU 使用率の低い関数を特定するには、[Hotspots by CPU Usage (CPU 使用率別 hotspot)] ビューポイントに切り替えます。デフォルトでは、関数は Poor (低) プロセッサー使用率でソートされています。最もクリティカルな関数が最初に表示されます。[CPU Time (CPU 時間)] 列見出しで
ボタンをクリックすると、列を展開して使用率タイプごとの時間分布を確認できます。各使用率タイプの見出しを右クリックして [Set Column as Data of Interest (列を特定のデータに設定)] を選択すると、その列の値をほかのビューで計算 (例えば、[Call Stack (コールスタック)] ペインのスタックの割合) に使用できます。
シリアルで実行され、利用可能なコアを効率良く使用していない関数を特定するには、[Hotspots by Thread Concurrency (スレッドのコンカレンシー別 hotspot)] ビューポイントに切り替えます。関数はコンカレンシー・レベルの低い CPU 時間でソートされています。このモードは、[Hotspots by CPU Usage (CPU 使用率別 hotspot)] ビューポイントに似ています。
CPU 使用率で Poor (低) (バー形式の場合は赤いバー
) の時間が最も長い関数の最適化を行います。次に、CPU 使用率で Over (高) (青いバー
) の時間が最も長いものを探します。
目標は、CPU 使用率/コンカレンシーが Poor (低) および Over (高) のものを短くし、Ideal (理想) (緑
) または OK (許容範囲) (オレンジ
) になるように最適化します。
- タイムラインを検証します。
[Bottom-up (ボトムアップ)] / [Top-down Tree (トップダウン・ツリー)] ウィンドウの下部にある [Timeline (タイムライン)] ペインは、アプリケーションのスレッドの動作、および CPU 使用率とスレッドのコンカレンシーの変化を表示します。データを検証して、問題箇所を選択し、ポップアップ・メニュー・オプションを使用してその領域を拡大します。例えば、次の図では、31.5s ~ 32s で CPU 使用率とスレッドのコンカレンシー・レベルが Poor になっています。4 つのスレッドのうち、3 つが待機中です。この間、アプリケーションが何をしていたかを調べるには、スレッドでデータをグループ化して、特定のスレッドに注目してみます。次の例では、threadstartex スレッドに注目して、その関数で CPU 使用率が低い箇所のソースコードを検証します。

- アルゴリズムの問題を特定します。
アプリケーションの呼び出しシーケンスに問題があることがあります。この場合、関数を呼び出す方法を変更することで、パフォーマンスを向上できます。問題の可能性のある箇所を調べるには、次のような方法があります。
[Bottom-up (ボトムアップ)] ペインで hotspot 関数を右クリックして、[Highlight Selection in Top-down Tree Pane (トップダウン・ツリー・ペインで選択をハイライト)] を選択します。すると、[Top-down Tree (トップダウン・ツリー)] ペインを開いたときに、コールツリーでその hotspot 関数がハイライトされます。hotspot の呼び出し元と呼び出し先の合計時間とセルフ時間を検証して、それぞれの時間を最適化できるかどうか確認します。
[Call Stack (コールスタック)] ペインでは、[Bottom-up (ボトムアップ)] / [Top-down Tree (トップダウン・ツリー)] ペインで選択したプログラムユニットのスタックのうち最も割合の高いものが表示されます。ナビゲーション・ボタン
を使用して、選択したプログラムユニットを呼び出したスタックの表示を切り替えることができます。バーは、選択したプログラムユニットで費やされた合計時間に対する現在表示されているスタックの割合を示しています。
[Call Stack (コールスタック)] ペインのドロップダウン・リストを使用して、異なるスタックのデータを表示することもできます。
- ソースを検証します。
クリティカルな関数を特定したら、その関数をダブルクリックして [Source/Assembly (ソース/アセンブリー)] ウィンドウを開き、ソースコードを検証できます。
[Timeline (タイムライン)] で遷移している箇所をダブルクリックすると、その遷移のコールサイトが表示されます。 インテル(R) VTune(TM) Amplifier XE から直接コードエディターを開き、コードを編集 (並列化、競合の不均衡の是正または軽減など) できます。
- その他の解析タイプを試してみます。
- ロックと待機の解析では、アプリケーションが利用可能なプロセッサーを効率良く利用していない理由を知ることができます。
- 比較解析では、最適化によるパフォーマンスの向上を評価できます。
- 高度なハードウェア・レベル解析では、アプリケーションのパフォーマンスに影響を与えているハードウェア問題を特定できます。