< Table Of Contents

ルーフライン解析の実行

このトピックは、自動ルーフライン・グラフを使用して、優先度の高い最適化を決定する方法を紹介するチュートリアルの一部です。

以下のステップを実行します。

このトピックでは、以下について説明します。

ルーフライン解析の実行

[Vectorization Workflow (ベクトル化ワークフロー)] ペインで [Run Roofline (ルーフラインを実行)] の下にある インテル® Advisor のコントロール: 解析の実行 コントロールをクリックして、ターゲット・アプリケーションを 2 回実行します。

完了すると、インテル® Advisor は [Roofline (ルーフライン)] グラフを表示します。

Visual Studio* IDE に [ワークフロー] が表示されない場合、インテル® Advisor ツールバーの インテル® Advisor ツールバーアイコン アイコンをクリックします。(表示には数秒かかる場合があります)。

ルーフライン・グラフの表示/非表示

ルーフライン・グラフを表示/非表示にするコントロールがいくつかあります。
インテル® Advisor: ルーフライン・グラフとサーベイレポート

1

クリックして、[Roofline (ルーフライン)] グラフと [Survey Report (サーベイレポート)] の表示を切り替えます。

2

クリックして、[Roofline (ルーフライン)] グラフと [Survey Report (サーベイレポート)] を並べて表示/個別に表示します。

3

ドラッグして、[Roofline (ルーフライン)] グラフと [Survey Report (サーベイレポート)] のサイズを調整します。

ヒント

このチュートリアルの以降の説明では、[Roofline (ルーフライン)] グラフと [Survey Report (サーベイレポート)] を並べて表示します。

ルーフライン・グラフのデータの理解

[Roofline (ルーフライン)] グラフは、マシンが達成可能な最大パフォーマンスと、アプリケーションの達成可能なパフォーマンス演算強度を表示します。

一般に、以下のことが言えます。

以下の [Roofline (ルーフライン)] グラフでは、ループ A と G (大きな赤いドット)、そして B (ルーフから離れている黄色のドット) が最適化の最良の候補です。ループ C、D、E (小さな緑のドット) と H (黄色のドット) は、パフォーマンス向上の余地があまりないか、パフォーマンスに大きな影響を与えるには小さすぎるため候補にはなりません。
これは、ルーフライン・グラフの実際のスクリーンショットではなく、ビジュアルモデルです。

[Roofline (ルーフライン)] グラフと [Survey Report (サーベイレポート)] は、同期されます。ループが浮動小数点操作を含んでいる場合、[Roofline (ルーフライン)] グラフの [Survey Report (サーベイレポート)] の対応するデータ行がハイライトされ、[Survey Report (サーベイレポート)] のデータ行をクリックすると [Roofline (ルーフライン)] グラフの対応する点が点滅します。浮動小数点操作を含まないループは、[Roofline (ルーフライン)] グラフには表示されません。

[Roofline (ルーフライン)] グラフで各ルーフライン (ライン)、ピーク (長方形)、ループ (ドット) にマウスのカーソルを合わせると、各要素の説明が表示されます。

ルーフライン・グラフのコントロールの理解

以下を含む、いくつかのコントロールを利用して [Roofline (ルーフライン)] グラフの重要なデータに注目できます。
インテル® Advisor のキャッシュを意識したルーフライン・グラフ

1

  • [Select Loops by Mouse Rect (マウス移動で選択されたループ)]: マウスで長方形の範囲の 1 つ以上のループ/関数を選択します。

  • [Zoom by Mouse Rect (マウス移動でズーム)]: マウスで範囲をズームイン/アウトします。マウスホイールでズームイン/アウトすることもできます。

  • [Move View By Mouse (マウスを移動して表示)]: グラフを上下左右に移動します。

  • [Undo (取り消し)] または [Redo (やり直し)]: ズームを解除、再適用します。

  • [Cancel Zoom (ズームをキャンセル)]: デフォルトのズームレベルにリセットします。

  • [Export as x (x としてエクスポート)]: インテル® Advisor を起動しなくても表示できる、動的で対話型の HTML または SVG ファイルとしてグラフをエクスポートします。ドロップダウンで出力ファイル形式を切り替えます。

2

[Cores (コア)] ドロップダウン・ツールバーを使用して次の操作を行います。

  • ルーフラインを調整して、ホストシステム上のコードのパフォーマンスを実際に制限するものを確認します。

  • シングルスレッドのアプリケーション (または、ランクごとに 1 つのスレッドを実行するような MPI アプリケーションのような、シングルスレッドで実行するように構成されたマルチスレッド・アプリケーション) 向けにルーフをビルドする際にこのチェックボックスを使用します。(インテル® Advisor のフィルターを使用して [Roofline (ルーフライン)] グラフに表示するループを制御できますが、[Roofline (ルーフライン)] グラフは [Threads (スレッド)] フィルターをサポートしていません。)

適切な CPU コア数を選択して、ルーフの値を増減できます。

  • 1 – コードがシングルスレッドの場合

  • スレッド数と同じまたはほぼ同じコア数 – コードのスレッド数が利用可能な CPU コア数よりも少ない場合

  • 最大コア数 – コードのスレッド数が利用可能な CPU コア数よりも多い場合

デフォルトでは、コア数はアプリケーションで使用されるスレッド数 (偶数値) に設定されています。

コードをマルチソケット PC で実行する場合、次のオプションが表示されます。

  • アプリケーションがメモリーを単一ソケットにバインドする場合、[Bind cores to 1 socket (コアを 1 つのソケットにバインド)] を選択します。例えば、ソケットごとに 1 ランクの MPI アプリケーションでは、このオプションを使用します。

    単一ソケットで利用可能なコア数を超える CPU コア数を選択すると、このオプションは無効になります。
  • アプリケーションがメモリーをすべてのソケットにバインドする場合、[n ソケットすべてにコアを分散] を選択します。例えば、非 MPI アプリケーションではこのオプションを選択します。

3

  • 浮動小数点操作 (FLOP)、整数操作 (INT)、ミックス (FLOP + INT) の表示を切り替えます。

  • コールスタック付きのルーフラインを収集した場合: [Roofline (ルーフライン)] グラフにコールスタックを含めたグラフ表示を有効にします。

4

比較のため、ほかのインテル® Advisor で生成した結果や、アーカイブされていないスナックショットから [Roofline (ルーフライン)] グラフデータを表示します。

[drop-down (ドロップダウン)] ツールバーを使用して次の操作を行います。

  • 結果/スナップショットをロードして、[Compared Results (比較結果)] に対応するファイル名を表示します。

  • 選択した結果/スナップショットをクリアして、対応するファイル名を [Ready for comparison (比較の準備完了)] に移動します。

    : [Ready for comparison (比較の準備完了)] にあるファイル名をクリックして、結果/スナップショットを再ロードします。

  • 比較をファイルに保存します。

    それぞれのループ/関数間の関係を示す矢印は、比較ファイルをアップロードしても再表示されません。

表示されている結果上でループ/関数のドットをクリックすると、ロードされた結果/スナップショットの対応するループ/関数のドットとの関係 (矢印付きのライン) が示されます。

インテル® Advisor: ルーフラインの比較

5

ルーフライン・グラフにビジュアル・インジケーターを追加して、パフォーマンスの制限や、ループ/関数がメモリー依存か、計算依存か、あるいは両方かなど、データを解釈しやすくします。

[drop-down (ドロップダウン)] ツールバーを使用して次の操作を行います。

  • [Display roof rulers (ルーフルーラーを表示)] チェックボックスをオンにして、ループ/関数に最も近いおよび最上部のパフォーマンス・ルーフまでの垂直線 (ルーラー) を表示します。ルーラーを表示するには、ループ/関数にマウスカーソルを移動します。ラインと各ルーフが交差する場所では、そのループ/関数のハードウェア・パフォーマンスの上限がラベルで表示されます。

  • すべてのメモリーレベルのルーフラインを収集した場合: [Show memory level relationships (メモリーレベルの関係を表示)] チェックボックスをオンにすることで、選択したループ/関数のメモリーレベルとルーフ間の関係を視覚的に強調できます。

  • [Show Roofline boundaries (ルーフライン境界を表示)] チェックボックスをオンにすると、ルーフライン領域を色分けして、ループ/関数が基本的にメモリー依存、計算依存、または計算とメモリー両方のルーフに依存するか分かり易く表示します。

ガイダンスオプションを選択するとプレビュー画像が更新され、変更内容をルーフライン・グラフの外観に反映した状態を確認できます。[Apply (適用)] をクリックして変更を適用するか、[Default (デフォルト)] をクリックしてルーフライン・グラフを元の表示に戻します。

ループ/関数のドットがハイライト表示されたら、ループ/関数をもう一度ダブルクリックするか、ループ/関数を選択した状態で [スペース] キーまたは [Enter] キーを押して、選択したループ/関数のドットにルーフライン・グラフをズームできます。オリジナルのルーフライン・グラフ表示に戻るまでこのアクションを繰り返します。

ラベル付けされたドットを非表示にするには、別のループ/関数を選択するか、ルーフライン・グラフの空白の領域をダブルクリックします。

6

  • Roofline View Settings (ルーフライン表示の設定): 次を表示するようにデフォルトのスケール設定を調整します。

    • ルーフライン・グラフに最適なスケール

    • すべてのルーフライン・グラフに適したスケール

  • Roofs Settings (ルーフの設定): ルーフラインの表示 (線) と可視性を変更します。

    • シングルスレッドのベンチマーク結果に基づいてルーフの値を計算するようにします。
    • [Visible (表示)] チェックボックスをクリックして、ルーフラインを表示/非表示にします。
    • ルーフラインの外観を変更するには、[Selected (選択)] チェックボックスをクリックします。ルーフラインを実線または破線で表示します。
    • [Value (値)] カラムのルーフ値をを手動で調整して、コード固有のハードウェアの制限を設定できます。
  • Loop Weight Representation (ループの重みを表現): ループの重みの表示 (ドット) を変更します。

    • [Point Weight Calculation (ポイントの重みを計算)]: ループ/関数の重み計算の [Base Value (ベース値)] を変更します。
    • [Point Weight Ranges (ポイントの重み範囲)]: ループ/関数ドットの [Size (サイズ)][Color (色)]、そして重みの [Range (範囲)]® を変更します。[+] ボタンをクリックして、ループの重み範囲を 2 つに分割します。[-] ボタンをクリックするとループの重み範囲が下の範囲とマージされます。
    • [Point Colorization (ポイントの色分け)]: 重みの範囲またはタイプ (ベクトルまたはスカラー) により、ループ/関数のドットを色分けします。セルフ時間のないループの色を変更することもできます。

ルーフの設定やドットの重み表現の設定を JSON ファイルに保存したり、カスタム設定をロードできます。

7

数値を使用して拡大/縮小できます。

8

ループ/関数のドットをクリックして、次の操作を行うことができます。

  • 黒枠を表示します。

  • ループ/関数のメトリックを表示します。

  • ほかのウィンドウタブで対応するデータを表示します。

[Roofline (ルーフライン)] グラフでループ/関数のドットまたは空白の部分を右クリックすると、次のような機能を実行できます。

  • [Roofline (ルーフライン)] グラフをさらに簡略化するには、フィルターアウト (一時的にドットを非表示)、フィルターイン (一時的に他のすべてのドットを非表示)、またはフィルターをクリア (最初に表示されたすべてのドットを表示) を行います。

  • クリップボードにデータをコピーします。

9

メトリックペインの表示/非表示:

  • [Point Info (ポイント情報)] ペインで基本的なパフォーマンス・メトリックを確認します。
  • すべてのメモリーレベルのルーフラインを収集した場合: ループ/関数がキャッシュをどの程度効率良く使用しているか、また [Memory Metrics (メモリーメトリック)] ペインでループ/関数の上限となるメモリーレベルを確認します。

10

各ループの重み表現カテゴリーのループの数と割合を表示します。

このチュートリアルの以降の説明では、

時間とハードウェア依存性を考慮して、事前に収集された解析結果を使用します。