内容
1

インテル® Advisor による CPU ルーフライン

2

インテル® Advisor によるベクトル化

3

インテル® Advisor によるオフロードのモデル化

4

インテル® Advisor による GPU ルーフライン

2

GPU 計算向けのインテル解析ツール
インテル® Advisor

インテル® VTune™ プロファイラー

オフロードのモデル化 (オフロード・アドバイザー)

オフロードのパフォーマンス・チューニング

▪

GPU オフロードにより大きな効果が得られる候補の特定▪

ボトルネックと主な制限要因を検出▪

パフォーマンス、ヘッドルーム、ボトルネックをモデル化することで、ハードウェアを入手する前にコードを準備することができます▪

プラットフォーム上の各種 CPU コアや GPU コアでのコード実行を調査できます▪

CPU と GPU のアクティビティーを関連付けます▪

アプリケーションが GPU 依存であるか CPU 依存であるかを特定します

ルーフライン解析▪

ハードウェアの上限に対するパフォーマンスのヘッドルームを確認

HPC パフォーマンス特性▪

ボトルネックとどの最適化が最も効果的であるかを特定し、パフォーマンス最適化の方針を決定します▪

▪

最適化の状況を可視化

フローグラフ・アナライザー▪

CPU/GPU コードを可視化し、CPU デバイスの推奨値を取得

OpenMP* アプリケーションがワークを効率良く GPU にオフロードしているか確認します

GPU 計算/メディア・ホットスポット▪

最も時間を要する GPU カーネルを解析し、GPU ハードウェア・メトリックに基づいて GPU の使用率を特徴付けます▪

ソース行およびカーネル・アセンブリー・レベルでの GPU コードのパフォーマンスを表示します3ハイパフォーマンスなコードを設定するための豊富な機能セット
インテル® Advisor

オフロードのモデル化(オフロード・アドバイザー)

ルーフライン解析

ベクトル化の最適化

スレッドのプロトタイプ作成

GPU 向けのオフロード戦略とモデルのパフォーマンスを設定

アプリケーションの計算とメモリーを最適化

ベクトル化の並列性により効率を改善

マルチスレッド設計のモデル化、チューニング、およびテスト

ヘテロジニアス
アルゴリズムを設計
データフローと依存関係の計算グラフを作成して解析4

パフォーマンス向上のためインテル® Advisor を使用
既存の CUDA* コード

新しいコード既存の C++
コード

既存の C または Fortranコード

既存の OpenCL*
アプリケーションインテル® DPC++
互換性ツール

オフロードするカーネルを特定するためオフロードのモデル化 (オフロード・アドバイザー) を使用します

インテル® Advisor – オフロードのモデル化
選択
カーネル形式:
データ並列 C++

ディレクティブ
形式:
OpenMP*

インテル® SDK
for OpenCL* ア
プリケーション

データ並列C++

インテル® Advisor とインテル® VTune™ プロファイラーを使用してカーネルを最適化します
最適化されたインテル® Advisor – GPU ルーフラインとフローグラフ解析

コード

インテル® Advisor による
CPU ルーフラインボトルネックの場所は?

ルーフライン・グラフとは?

パフォーマンス改善の余地は?
ハードウェアの性能上限に対するアプリケーションのパフォーマンスを比較対応できるボトルネックと対処すべきボトルネック最も可能性の高い原因は?

次にすべきことは?
7

ルーフライン・グラフを表示
操作 (ops)/バイト (算術強度) と 1 秒間に供給される最大バイトの積である最大FLOPS が対角線で示されます
FLOPS

CPU の最大FLOPS は水平線で表示されます

ループまたは関数はグラフ上にドット(点) として表示されます

ルーフライン・グラフは、X 軸に演算強度(AI) を Y 軸に FLOPS を示します

演算強度
FLOP/バイト8最終的にパフォーマンスを制限するものはパフォーマンスはマシンの能力を超えることはできないため、それぞれのループは最終的に計算またはメモリーの性能によって制限されます

FLOPS

最終的にメモリー依存

最終的に計算依存
演算強度
FLOP/バイト9最適化の労力を最も効果的な場所に集中させます

最良の最適化候補を特定• 大きくそして赤く表示される
ループが最もインパクトがあります• ルーフから離れているループには改善の余地があります

特定の計算タイプやキャッシュレベルに応じて、追加のループ情報を表示できます10CPU ルーフライン・グラフの例

11

インテル® Advisor によるベクトル化

データ領域の正しいデータベクトル化に必要なすべてのデータを取り込む
ベクトル化されたループのフィルター処理

ホットなループに注目

ベクトル化の問題は?

ベクトル化を妨げる要因

ベクトル化の命令セットは?

コードの効率は?

13効率良いベクトル化のための 5 つのステップ
1. コンパイラーの診断 + パフォーマンス・データ + SIMD 効率情報

2. ガイド: 問題を特定して解決方法を推奨

3. “正確な” トリップカウント + FLOPS とマスク: 利用率、並列性の粒度、オーバーヘッドを理解

4. ループ伝搬依存の解析

5. メモリー・アクセス・パターンの解析

14

コードを効率良くベクトル化

1. コンパイラーの診断 + パフォーマンス・データ + SIMD 効率情報

2. ガイド: 問題を特定して解決方法を推奨

クリックして推奨事項を表示
インテル® Advisor は、ループ反復をベクトル本体へ移動するヒントを示します
15

ループが実行された回数とトリップカウントを特定します
3. “正確な” トリップカウント + FLOPS とマスク: 利用率、並列性の粒度、オーバーヘッドを理解

実際のトリップカウントを確認

ループで実行された時間を知るだけでは不十分

ループの反復回数を知る必要があります16ベクトル化しても安全か?
ループ伝搬依存の解析で正当性を検証

4. ループ伝搬依存の解析

依存性解析を行
ループを選択しうループを選択て依存性解析をしてボタンをク実行
リック !

ベクトルの依存関係はベクトル化を妨げます17メモリー・アクセス・パターン (MAP) 解析
アクセスパターンを理解
5. メモリー・アクセス・パターンの解析

一意なストライドアクセス
for(k=0; k<msize; k++)c[i][j] = c[i][j] + a[i][k] * b[k][j];一定ストライドアクセス
for(k=0; k<msize; k++)c[i][j] = c[i][j] + a[i][k] * b[k][j];可変ストライドアクセス
for (i=0; i<N; i++)A[B[i]] = C[i]*D[i]18インテル® Advisor によるオフロードのモデル化

インテル® Advisor - オフロードのモデル化•CPU または GPU で実行- GPU 向けの予測•

利用可能なアクセラレー
ターで実行するコードセ
クションの定義を支援•アクセラレーターでの性能を予測します

オフロードはLLC 帯域幅依存

オフロードの利点はありません

オフロードの推奨

20インテル® Advisor - オフロードのモデル化
オフロードの利点があるコードを特定
ループはアプリケーションの実行時間の 100% を占めています

ループは GPU でCPU の 3.3 倍高速に実行されます

結果としてアプリ
ケーションは 3.3 倍高速化されます21上位オフロード領域の解析
各ループをモデル化して詳しい説明を示します••••

タイミング (合計時間、アクセラレーター上の時間、スピードアップ)
オフロードメトリック (オフロードのデータ転送コスト)
メモリー・トラフィック (DRAM、L3、L2、L1)、トリップカウント
アクセラレーターで実行すべきコード領域をハイライト

multiply.c の 53 行目にあるループをオフロードすることを推奨• LLC 帯域幅依存• 予測される GPU での実行時間は 6.997 秒• 101MB のデータを転送22

上位オフロード領域の解析
ループメトリックはソースおよびコールツリーに関係します23インテル® Advisor による
GPU ルーフライン効果的な最適化の戦略を特定
インテル® Advisor - GPU ルーフライン
GPU ルーフラインのパフォーマンス詳細• パフォーマンスの問題があるループをハイライト• ボトルネックの原因を表示• 最適化の次のステップを提案• 各ループのパフォーマンス改善の「余地」を表示-改善可能なループは?
-改善の価値があるループは?

25効果的な最適化の戦略を特定
インテル® Advisor - GPU ルーフライン
表示レベルを設定

各ループのパフォーマンス改善の余地を表示

ボトルネックの可能性
最適化の次のステップを提案
26

必要なルーフだけを表示するようにカスタマイズ
右上隅をクリックして必要のないループを非表示にする

27

メトリックのサマリー

レポートタブを切り替え
GPU ルーフライン・グラフをカスタマイズ

スナップショットを生成

詳細、GPU ソース、GPU アセンブリー
情報を表示

計算タスクのGPU パフォー
マンス

28

インテル® DevCloud のチュートルアルインテル® DevCloud のチュートルアル
oneAPI Essentials/05_Intel_Advisor/30法務上の注意書きと最適化に関する注意事項
本資料には、開発中の製品、サービスおよびプロセスについての情報が含まれています。本資料に含まれる情報は予告なく変更されることがあります。 インテル® テクノロジーの機能と利点はシステム構成によって異なり、対応するハードウェアやソフトウェア、またはサービスの有効化が必要となる場合があります。詳細については、各システムメーカーまたは販売店にお問い合わせいただくか、http://www.intel.co.jp/ を参照してください。
上記のベンチマーク結果は、追加のテストによって変更が必要になる可能性があります。結果は、テストに使用される特定のプラットフォーム構成や作業負荷に依存します。個々のユーザーのコンポーネント、コンピューター・システム、作業負荷では同様の結果が得られない可能性があります。結果は、必ずしもほかのベンチマークを代表するものではなく、ほかのベンチマークでは、結果が異なることがあります。
性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。SYSmark* や MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。詳細については、www.intel.com/benchmarks (英語) を参照してください。
本資料に掲載されている情報は現状のまま提供され、いかなる保証もいたしません。本資料は、明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず、いかなる知的財産権のライセンスを許諾するためのものではありません。製品に付属の売買契約書『Intel's Terms and Conditions of Sale』に規定されている場合を除き、インテルはいかなる責任を負うものではなく、またインテル製品の販売や使用に関する明示または黙示の保証（特定目的への適合性、商品性に関する保証、第三者の特許権、著作権、その他、知的財産権の侵害への保証を含む）をするものではありません。
© 2021 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

最適化に関する注意事項
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。
改訂 #20110804

31