< 目次

CPU ルーフライン・グラフのボトルネックを調査

精度レベル

Low (低)

有効となる解析

サーベイ + FLOP (特性化)

結果の解釈

ドットが最上部のルーフから離れるほど、改善の余地は大きくなります。アムダールの法則に従って、プログラムの合計実行時間の大半を占めるループを最適化することで、実行時間が短いループを最適化するよりも大幅な効果が期待できます。

キャッシュ対応の CPU ルーフライン・グラフの例

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

ドット上のルーフは、より高いパフォーマンスの達成を制限する要因を示していますが、ドットの下にあるルーフもパフォーマンスの関連性を示します。それぞれのルーフは、上位にあるルーフに関連する特定の最適化を行わなくても達成可能な最大パフォーマンスを表わしています。ドットの位置に応じて次の最適化を試します。

さらに正確な最適なの推奨事項については、[コード解析] タブのルーフラインのガイドおよび [推奨事項] タブのルーフラインの結果を参照してください。

ドットの位置

理由

最適化

メモリールーフの下 (DRAM 帯域幅、L1 帯域幅など)

ループ/関すのメモリ使用は非効率です。

このループのメモリー・アクセス・パターン解析を実行します。

  • MAP 解析でキャッシュの最適化が示される場合は適切に最適化します。
  • キャッシュの最適化が不可能であるなら、高い AI を持つアルゴリズムの導入を検討してください。

ベクトル加算ピーク以下

ループ/関数は命令セットを十分に活用していません。

サーベイレポートの [特性] カラムをチェックして、FMA 命令が使用されているか確認します。

  • FMA 命令が使用されていない場合、コードまたはコンパイルオプションを変更して、FMA の導入を検討してください。

スカラー加算ピークのすぐ上

ループ/関数はベクトル化されていません。

サーベイでベクトル化の効率とパフォーマンス問題を確認してください。低い値が示される場合、推奨事項に従って改善します。

スカラー加算ピーク以下

ループ/関数はスカラーです。

ループがベクトル化されている場合、サーベイレポートを確認します。ベクトル化されていなければ、可能な限りベクトル化してください。これには、依存関係解析を実行して、ベクトル化を強制しても安全であるか確認が必要な場合もあります。

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

一部のアルゴリズムは特定のルーフを超えることができません。例えば、上記の例のループ A が依存関係のためにベクトル化できない場合、スカラー加算ピークを超えることはありません。

ヒント

メモリーのルーフを超えることができない場合、計算強度を高めるためアルゴリズムの改良を検討してください。これにより、メモリー帯域幅の上限に達する前に、右側に移動してパフォーマンスを向上させる余地が増えます。これは、例のループ F を最適化する適切なアプローチであり、キャッシュの使用を改善できない場合はループ G を最適化する適切なアプローチでもあります。

特定のループを解析

グラフ上のドットを選択して、[Code Analytics (コード解析)] タブを開くと、選択したループに関連する詳細情報が表示されます。

次のステップ