メモリーレベル間の関係を調査

精度レベル

有効となる解析

サーベイ + 特性化 (トリップカウント & FLOP、コールスタック、メモリーレベル) + メモリー・アクセス・パターン

結果の解釈

精度のプリセットでは、インテル® Advisor は基本的なルーフライン機能を拡張し、すべてのメモリーレベルのメトリックコールスタック・データを収集します。これにより、アプリケーションを詳しく解析できます。ルーフライン・グラフは、メモリー・アクセス・パターン解析の結果を基に、ループを制限する要因を把握し、ルーフライン・ガイドで推奨事項を示します。

メモリー・アクセス・パターンのデータ解釈については、メモリー使用とトラフィックを調査を参照してください。

このトピックでは、インテル® Advisor GUI の CPU ルーフライン・レポートに示されるデータについて説明します。結果を HTML 形式で表示することもできますが、データの配置とペインが異なることがあります。

メモリーレベルのルーフライン

メモリーレベルのルーフラインを使用すると、それぞれのキャッシュレベルと演算強度で各ループを調査することができ、どのキャッシュレベルがパフォーマンスのボトルネックであるか正確に理解できます。

メモリーレベルのルーフラインは以下に役立ちます。

すべてのメモリーレベルに対してドットを表示したメモリーレベルの CPU ルーフライン・グラフ

次のようにメモリーレベルのルーフライン・グラフを設定します。

  1. [ルーフライン・グラフ] ツールバーの [フィルター] ペインを展開します。
  2. [メモリーレベル] セクションで、メトリックを表示するメモリーレベルを選択します。

    CPU メモリーレベルのルーフライングラフを設定

  3. [Apply (適用)] をクリックします。
  4. Roofline chart (ルーフライン・グラフ) で、ループをダブルクリックして、表示されるメモリーレベルとルーフの関係を調べます。ラベル付きのドットで、選択されたループ/関数の演算強度のメモリーレベルを示します。ドットはラインで接続され、選択されたループ/関数に対応することを表します。

    メモリーレベルの CPU ルーフライン・グラフのすべてのメモリーレベルのドットを参照

ヒント

デフォルトで、メモリーレベルのルーフライン・グラフは、システムキャッシュ構成に対して生成されます。カスタムキャッシュ構成のグラフを生成することもできます。
  1. [プロジェクトのプロパティー...] > [トリップカウントと FLOP] に移動します。
  2. [Cache simulator (キャッシュ・シミュレーター)] フィールドで、[Modify (変更)] をクリックします。
  3. [Add (追加)] をクリックして、対象のキャッシュ構成を入力または選択します。
  4. 精度でルーフラインを再実行します。

メモリーレベルのルーフライン・データ

インテル® Advisor はキャッシュ・シミュレーションにより、CPU および異なるメモリー・サブシステム間のすべてのトラフィック・タイプの統合トラフィック・データを収集します。このデータを基に、インテル® Advisor は特定のキャッシュレベルのデータ転送数をカウントし、それぞれのループと各メモリーレベルの AI を計算します。

一方のレベルから他方のレベルへのトラフィックの変化を観察し、これらのレベルで可能な限り高い帯域幅を表すルーフと比較することで、カーネルのメモリー階層のボトルネックを特定し最適化の方針を決定します。

  • メモリードットとそれぞれのルーフライン間の垂直距離は、特定のメモリー・サブシステムによって制限される度合いを示します。ドットがルーフラインに近い場合、カーネルはそのメモリーレベルのパフォーマンスで制限されていることを意味します。
  • メモリードット間の水平距離は、ループ/関数がキャッシュをどのくらい効率良く使用しているかを示します。例えば、L3 と DRAM のドットが 1 つのループの水平軸上で隣接している場合、ループ/関数は同様に L3 と DRAM を使用します。これは、L3 と DRAM が効率良く利用されていないことを意味します。すべてのループ/関数の演算強度を改善するため、コードのデータを再利用してアプリケーションのパフォーマンスを高めることができます。詳しいアドバイスについては、[コード解析] タブの [ルーフラインのガイド] を参照してください。
  • Arithmetic intensity (演算強度) はドットが表示される順番を決定し、コードのパフォーマンスを視覚的に理解できます。例えば、L1 のドットはグラフ上で左から右に最も大きく最初に表示されるドットでなければなりません。ただし、ドットの順番は、メモリー・アクセス・タイプ、レイテンシー、または技術的な問題により変わることがあります。さらにメモリー・アクセス・パターン解析を実行して、この問題を調査します。

特定のループを詳しく調査するには、グラフ上のドットを選択して、グラフの下にある [Code Analytics (コード解析)] タブを開きます。

コールスタック付きルーフライン

インテル® Advisor の基本ルーフライン・モデルである、キャッシュ対応のルーフライン・モデル (CARM) は、セルフデータを示します。コールスタック付きのインテル® Advisor のルーフラインは、合計データにより基本モデルを拡張します。

コールスタック付きのルーフラインの合計データは次のような場合に有用です。

コールスタックを表示するには、Roofline (ルーフライン) グラフで、[With Callstacks (コールスタック付き)] をオンにします。

コールスタック付き CPU ルーフライン

ドットの子や孫を表示/非表示にするには次のようにします。

コールスタック・グラフ・データを含むルーフライン

次の Roofline (ルーフライン) グラフは、コールスタック付きのルーフラインの利点を示します。

  • 選択されたループ/関数の呼び出しチェーン全体 (呼び出し先は除外します) を、ナビゲーション可能な色分けされた [Callstack (コールスタック)] ペインに示します。

  • ループと関数の関係を示す視覚的なインジケーター (呼び出し側と呼び出し先) を表示します。

  • いくつかの小さなループを 1 つの全対表現に統合することで、多数のドットがあるグラフを単純化できます。

    セルフデータを持たないループ/関数は、展開されるとグレー表示され、折りたたむとカラー表示されます。セルフデータを含むループ/関数は、展開されるとデータに適した座標、サイズ。およびカラー表示されますが、合計時間に関連するサイズは薄いグレーで表示されます。そのようなループ/関数が折りたたまれると、それらは合計時間に適したサイズとカラーに変わり、該当する場合は合計パフォーマンスと合計演算強度を反映します。


インテル® Advisor: コールスタック付きルーフライン

関連情報