このトピックは、自動ルーフライン・グラフを使用して、優先度の高い最適化を決定する方法を紹介するチュートリアルの一部です。
以下のステップを実行します。
このトピックでは、以下について説明します。
ルーフライン解析は、サーベイ解析と続けて実行されるトリップカウント & FLOP 解析の組み合わせです。トリップカウント & FLOP 解析の実行には、サーベイ解析の 3 ~ 4 倍の時間がかかる場合があります。
[Roofline (ルーフライン)] グラフの各ドットの大きさと色は、各ループ/関数の相対実行時間を表しています。大きな赤いドットは最も多くの時間を費やしており、小さな緑のドットは実行時間が短いことを示しています。
[Roofline (ルーフライン)] グラフの水平ライン (ルーフライン) は、計算能力の上限を示しており、最適化なしではループ/関数のパフォーマンスをこれ以上高めることはできません。
[Roofline (ルーフライン)] グラフの斜めのラインはメモリー帯域幅の上限を示しており、最適化なしではこれ以上のパフォーマンスは期待できません。
最上部のルーフラインはマシンの最大能力を示すため、ドットはこれを超えることはできません。そして、すべてのループがマシンの最大能力を利用できるわけではありません。
パフォーマンスを最大限に向上させる最良の候補は、最上部の達成可能なルーフラインから最も離れた大きな赤いドットです。
[Roofline (ルーフライン)] グラフには、外観を設定したり、興味のあるデータに注目する各種コントロールがあります。
[Vectorization Workflow (ベクトル化ワークフロー)] ペインで [Run Roofline (ルーフラインを実行)] の下にある コントロールをクリックして、ターゲット・アプリケーションを 2 回実行します。
マシンのハードウェアの上限を測定し、サーベイ解析を使用してループ/関数のタイミングを収集します。
トリップカウントと FLOP 解析を使用して FLOPS を収集 - この収集にはサーベイ解析より 3 倍から 4 倍の時間がかかります。
完了すると、インテル® Advisor は [Roofline (ルーフライン)] グラフを表示します。
Visual Studio* IDE に [ワークフロー] が表示されない場合、インテル® Advisor ツールバーの アイコンをクリックします。(表示には数秒かかる場合があります)。
ルーフライン・グラフを表示/非表示にするコントロールがいくつかあります。
1 |
クリックして、[Roofline (ルーフライン)] グラフと [Survey Report (サーベイレポート)] の表示を切り替えます。 |
2 |
クリックして、[Roofline (ルーフライン)] グラフと [Survey Report (サーベイレポート)] を並べて表示/個別に表示します。 |
3 |
ドラッグして、[Roofline (ルーフライン)] グラフと [Survey Report (サーベイレポート)] のサイズを調整します。 |
このチュートリアルの以降の説明では、[Roofline (ルーフライン)] グラフと [Survey Report (サーベイレポート)] を並べて表示します。
[Roofline (ルーフライン)] グラフは、マシンが達成可能な最大パフォーマンスと、アプリケーションの達成可能なパフォーマンスと演算強度を表示します。
演算強度 (x 軸) - ループ/関数のアルゴリズムを基に、CPU/VPU とメモリー間で転送された 1 バイトあたりの浮動小数点操作数 (FLOPs) または整数操作数 (INTOPs) で測定されます。
パフォーマンス (y 軸) - 1 秒あたりの 10 億浮動小数点演算数 (GFLOPS) または 10 整数演算数 (GINTOPS) で測定されます。
一般に、以下のことが言えます。
[Roofline (ルーフライン)] グラフの各ドットの大きさと色は、各ループ/関数の相対実行時間を表しています。大きな赤いドットは最も多くの時間を費やしているため、最適化の最良の候補です。小さな緑のドットは実行時間が短いため、最適化の労力が無駄になるかもしれません。
[Roofline (ルーフライン)] グラフの斜めのラインはメモリー帯域幅の上限を示しており、最適化なしではこれ以上のパフォーマンスを達成することはできません。例えば、[L1 Bandwidth (L1 帯域幅)] ルーフラインは、ループが常に L1 キャッシュにヒットする場合に、ある演算強度で実行可能な最大ワーク量を示します。データセットによりループが頻繁に L1 キャッシュをミスする場合、ループは L1 より速度の恩恵を受けられず、実際にヒットする速度が遅い L2 キャッシュの制限を受けます。そのため、L1 キャッシュを頻繁にミスし、L2 キャッシュにはヒットするループを示すドットは、[L2 Bandwidth (L2 帯域幅)] ルーフライン下に表示されます。
[Roofline (ルーフライン)] グラフの水平ライン (ルーフライン) は、計算能力の上限を示しており、最適化なしではループ/関数のパフォーマンスをこれ以上向上することはできません。例えば、[Scalar Add Peak (スカラー加算ピーク)] は、これらの状況下でスカラーループが実行可能な加算命令のピーク数を示します。[Vector Add Peak (ベクトル加算ピーク)] は、これらの状況下でベクトル化されたループが実行可能な加算命令のピーク数を示します。そのため、ベクトル化されていないループのドットは、[Scalar Add Peak (スカラー加算ピーク)] ルーフラインの下に表示されます。
最上部のルーフラインはハードウェアの最大能力を示すため、ドットはこれを超えることはできません。そして、すべてのループがハードウェアの最大能力を利用できるわけではありません。
ドットと最上部の達成可能なルーフラインの間の距離が大きいほど、パフォーマンス向上の可能性が高くなります。
以下の [Roofline (ルーフライン)] グラフでは、ループ A と G (大きな赤いドット)、そして B (ルーフから離れている黄色のドット) が最適化の最良の候補です。ループ C、D、E (小さな緑のドット) と H (黄色のドット) は、パフォーマンス向上の余地があまりないか、パフォーマンスに大きな影響を与えるには小さすぎるため候補にはなりません。
[Roofline (ルーフライン)] グラフと [Survey Report (サーベイレポート)] は、同期されます。ループが浮動小数点操作を含んでいる場合、[Roofline (ルーフライン)] グラフの [Survey Report (サーベイレポート)] の対応するデータ行がハイライトされ、[Survey Report (サーベイレポート)] のデータ行をクリックすると [Roofline (ルーフライン)] グラフの対応する点が点滅します。浮動小数点操作を含まないループは、[Roofline (ルーフライン)] グラフには表示されません。
[Roofline (ルーフライン)] グラフで各ルーフライン (ライン)、ピーク (長方形)、ループ (ドット) にマウスのカーソルを合わせると、各要素の説明が表示されます。
以下を含む、いくつかのコントロールを利用して [Roofline (ルーフライン)] グラフの重要なデータに注目できます。
1 |
|
2 |
[Cores (コア)] ドロップダウン・ツールバーを使用して次の操作を行います。
適切な CPU コア数を選択して、ルーフの値を増減できます。
デフォルトでは、コア数はアプリケーションで使用されるスレッド数 (偶数値) に設定されています。 コードをマルチソケット PC で実行する場合、次のオプションが表示されます。
|
3 |
|
4 |
比較のため、ほかのインテル® Advisor で生成した結果や、アーカイブされていないスナックショットから [Roofline (ルーフライン)] グラフデータを表示します。 [drop-down (ドロップダウン)] ツールバーを使用して次の操作を行います。
表示されている結果上でループ/関数のドットをクリックすると、ロードされた結果/スナップショットの対応するループ/関数のドットとの関係 (矢印付きのライン) が示されます。 |
5 |
ルーフライン・グラフにビジュアル・インジケーターを追加して、パフォーマンスの制限や、ループ/関数がメモリー依存か、計算依存か、あるいは両方かなど、データを解釈しやすくします。 [drop-down (ドロップダウン)] ツールバーを使用して次の操作を行います。
ガイダンスオプションを選択するとプレビュー画像が更新され、変更内容をルーフライン・グラフの外観に反映した状態を確認できます。[Apply (適用)] をクリックして変更を適用するか、[Default (デフォルト)] をクリックしてルーフライン・グラフを元の表示に戻します。 ループ/関数のドットがハイライト表示されたら、ループ/関数をもう一度ダブルクリックするか、ループ/関数を選択した状態で [スペース] キーまたは [Enter] キーを押して、選択したループ/関数のドットにルーフライン・グラフをズームできます。オリジナルのルーフライン・グラフ表示に戻るまでこのアクションを繰り返します。 ラベル付けされたドットを非表示にするには、別のループ/関数を選択するか、ルーフライン・グラフの空白の領域をダブルクリックします。 |
6 |
ルーフの設定やドットの重み表現の設定を JSON ファイルに保存したり、カスタム設定をロードできます。 |
7 |
数値を使用して拡大/縮小できます。 |
8 |
ループ/関数のドットをクリックして、次の操作を行うことができます。
[Roofline (ルーフライン)] グラフでループ/関数のドットまたは空白の部分を右クリックすると、次のような機能を実行できます。
|
9 |
メトリックペインの表示/非表示:
|
10 |
各ループの重み表現カテゴリーのループの数と割合を表示します。 |
時間とハードウェア依存性を考慮して、事前に収集された解析結果を使用します。