インテル® VTune™ プロファイラーのGPU 向け機能の概要

内容
1

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

2

インテル® VTune™ プロファイラーによる GPU 最適化の概要

3

インテル® VTune™ プロファイラーによる解析例2

インテル® oneAPI
ツールキットスケーラブルで高速なアプリケーションを実現

ツールキットの概要
C++、Fortran、OpenMP* および MPI でエンタープライズ、クラウド、HPC、AI 向けのハイパフォーマンスでスケーラブルな並列アプリケーションを開発するためにインテル® oneAPI
ベース・ツールキットに追加するツールキット

インテル®
ベース &HPC ツール
ツールキットHPC oneAPI
向けインテル®
oneAPI
ダイレクト・プログラミング

API ベースのプログラミング

解析/デバッグツール

インテル® C++ コンパイラー・クラシック

インテル® MPI ライブラリー

インテル® Inspector

インテル® Fortran コンパイラー・クラシック

インテル® oneAPI DPC++
ライブラリー(インテル® oneDPL)

インテル® Trace Analyzer& Collector

ベータ版インテル® Fortranコンパイラー

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL)

インテル® Cluster Checker

インテル® oneAPI DPC++/C++
コンパイラーインテル® oneAPI データ・アナリティクス・ライブラリー(インテル® oneDAL)

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

インテル® DPC++ 互換性ツール

インテル® oneAPI スレッディング・ビルディング・ブロック(インテル® oneTBB)

インテル® Advisor

インテル® ディストリビューションのPython*

インテル® oneAPI ビデオ・プロセシング・ライブラリー(インテル® oneVPL)

インテル® ディストリビューションのGDB

oneAPI ベース・ツールキット用
インテル® FPGA アドオン

インテル® oneAPI コレクティブ・コミュニケーション・ライブラリー(インテル® oneCCL)

対象ユーザー▪

OEM/ISV▪

C++、Fortran、OpenMP*、MPI 開発者

ツールキットの重要性▪

▪

インテル® Xeon® プロセッサー、インテル® Core™ プロセッサーおよびインテル® アクセラレーターのパフォーマ
ンスを向上
少ない労力で、高速かつ安定した、スケーラブルな業界標
準の並列コードを作成

インテル® oneAPI ディープ・ニュー
ラル・ネットワーク・ライブラリー(インテル® oneDNN)
インテル® oneAPI HPC ツール
キット +インテル® oneAPI ベース・ツール
キット

インテル® インテグレーテッド・パフォーマンス・プリミティブ(インテル® IPP)

詳細: intel.com/oneAPI-HPCKit (英語)3GPU 計算向けのインテル解析ツール
インテル® Advisor▪ オフロードのモデル化 (オフロード・アドバイザー)

インテル® VTune™ プロファイラー▪ オフロードのパフォーマンス・チューニング• GPU オフロードにより大きな効果が得られる候補の特定• プラットフォーム上の各種 CPU コアや GPU コアでのコード実行を調査できます• ボトルネックと主な制限要因を検出• CPU と GPU のアクティビティーを関連付けます• パフォーマンス、ヘッドルーム、ボトルネックをモデル化することで、ハードウェアを入手する前にコードを準備することができます• アプリケーションが GPU 依存であるか CPU 依存であるかを特定します▪ ルーフライン解析• ハードウェアの上限に対するパフォーマンスのヘッドルームを確認• ボトルネックとどの最適化が最も効果的であるかを特定し、パフォーマンス最適化の方針を決定します• 最適化の状況を可視化•フローグラフ・アナライザー▪ CPU/GPU コードを可視化し、CPU デバイスの推奨値を取得

HPC パフォーマンス特性•••

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

GPU 計算/メディア・ホットスポット• 最も時間を要する GPU カーネルを解析し、GPU ハードウェア・メトリックに基づいて GPU の使用率を特徴付けます• ソース行およびカーネル・アセンブリー・レベルでの GPU コードのパフォーマンスを表示します4インテル® VTune™ プロファイラーと GPU

5

インテル® VTune™ プロファイラー GUI: 概要▪ GUI には解析を設定する 3 つのペインがあります• [WHERE (どこを)] では解析システムを指定します• [WHAT (何を)] では解析のターゲットを指定します• [HOW (どのように)] では解析タイプを選択しますインテル® VTune™ プロファイラーのドキュメント:WHERE (どこを): 解析システム、WHAT (何を): 解析ターゲット およびHOW (どのように): 解析タイプ

6

GPU 向けの解析タイプ• GPU Offload
レンダリング、ビデオ処理、および計算にグラフィックス処理ユニット(GPU) を使用するアプリケーションをターゲットとします。アプリケーションが CPU または GPU のどちらに依存しているか判断するのに役立ちます• GPU Compute/Media Hotspots
GPU 依存のアプリケーションを対象とし、コード行ごとの GPU カーネル実行を解析し、メモリー・レイテンシーや非効率なカーネルのアルゴリズムによるパフォーマンスの問題を特定します• CPU/FPGA Interaction
各 FPGA アクセラレーターの FPGA 利用率を調査し、最も時間を消費するFPGA タスクを特定します• CPU/GPU Concurrency (廃止予定)

7

インテル® VTune™ プロファイラー CLI: 概要▪ CLI には複数レベルのヘルプがあります• vtune -help• vtune -help collect• vtune -help collect gpu-offload▪ 収集を実行します• vtune -collect <解析タイプ> <ターゲット>▪ レポートを生成します• vtune -report <レポート名> -r <結果フォルダー>インテル® VTune™ プロファイラーのドキュメント:コマンドライン・インターフェイス
8GPU オフロード▪ アプリケーションがワークを効率良くGPU にオフロードしているか確認するのに役立ちます▪ インテル® メディア SDK ベースのアプリ
ケーションや、 OpenCL* および レベル 0
インターフェイスを使用して、インテル®
GPU にワークをオフロードする DPC++
および OpenMP* アプリケーションのプロファイルに使用できます
インテル® VTune™ プロファイラーのドキュメント:GPU オフロード解析
9インテル® VTune™ プロファイラーを使用して GPU 使用状況を最適化
GPU オフロード

この最適化は以下を可能にします:
アプリケーションが DPC++
または OpenCL* カーネルをどのくらい効率良く使用しているか確認します
GPU の使用状況を調査して、すべての時点での GPUエンジンのソフトウェア・キューを解析します10インテル® VTune™ プロファイラーを使用して GPU 使用状況を最適化
GPU オフロード

インテル® VTune™ プロファイ
ラーの GPU オフロード機能を使用して、GPU をどの程度効率良く使用しているか確認しますインテル® VTune™ プロファイ
ラーは、同期された CPU とGPU のタイムラインを表示します
GPU オフロードでは、GPU 実行ユニットがストールしていることが、タイムラインのバー (濃い赤) で表示されています

11

HPC パフォーマンス特性▪ OpenMP* アプリケーションがワークを効率良く GPU にオフロードしているか確認するのに役立ちます▪ GPU オフロード解析との主な違いは、データが OMPT インターフェイスを介して収集されることですインテル® VTune™ プロファイラーのドキュメント:HPC パフォーマンス特性解析
12

GPU 計算/メディア・ホットスポット▪ 最も時間のかかる GPU カーネルを解析し、GPUハードウェア・メトリックをベースに GPU の使用状況を特徴付け、メモリー・レイテンシーや非効率なカーネル・アルゴリズムによって引き起こされるパフォーマンスの問題を特定して、命令タイプごとの GPU 命令を解析しますインテル® VTune™ プロファイラーのドキュメント:GPU 計算/メディア・ホットスポット解析

13

インテル® VTune™ プロファイラーを使用して GPU 使用状況を最適化
GPU 計算/メディア・ホットスポット
アクティブとアイドル
EU アクティビティー

複数レベルの帯域幅

インテル® VTune™ プロファイラーの GPU ホットス
ポット解析を実行して、GPU 利用率低下とストールの原因を特定します
GPU ホットスポットの[グラフィックス] タブをクリックすると、アーキテクチャーのハイレベルな図が表示されます

14インテル® VTune™ プロファイラー (インテル® GPU 用)関係を示すタイムライン
過大または過小なカーネル・アクティビティーを特定しますGPU アクティビティーをカーネルおよびスレッドに関連付けます15インテル® VTune™ プロファイラー (DPC++ コード用)

DPC++ のコード行レベルでのパフォーマンス・メトリック

計算カーネルのGPU アセンブリー

16

インテル® VTune™ プロファイラーによる GPU 最適化の概要
https://www.isus.jp/products/vtune/vtune-cookbook-sw-optimization-for-gpu/

17

インテル® GPU を理解する
並列処理の採用:
GPU は、同時に実行可能なタスクに分割できるワークロードに適しています。GPU のシングルコアのシリアル・パフォーマンスは、CPU よりもかなり低くなります。そのため、アプリケーションは、GPU で利用可能な大規模な並列処理を活用する必要があります

データの適切な移動:
GPU の時間と空間的な局所性を活用するように、データを適切に処理します。最高のパフォーマンスを得るには、レジスターとキャッシュを利用してデータを隣接して格納することが重要です

オフロードモデルの使用:
ワークロードの最も重要な部分は GPU を利用して処理されますが、ほかのワークロード・タスクを実行するCPU も重要であることに変わりはありません

18

計算モデルで GPU を利用するポイント• オフロードするコード領域• オフロードの方法• GPGPU アルゴリズムの記述方法• インテル® VTune™ プロファイラーの GPU オフロード解析を使用して GPU オ
フロードのパフォーマンスを解析する方法

19

インテル® GPU のアーキテクチャー
EU は、同時マルチスレッディング(SMT) と細粒度のインターリー
ブ・マルチスレッディング (IMT) を組み合わせたものです。EU は、複数の問題、SIMD ALU (SingleInstruction Multiple Data 演算ユニット) を処理するコンピューティング・プロセッサーです

これらの SIMD ALU は、複数のスレッドでパイプライン化されます。
SIMD ALU は、高スループットの浮動小数点演算と整数演算に役立ちます

Gen9 GT2 GPU の例
20効率良いスケジューリングの重要性• 通常、EU には機能処理ユニットよりも多くのハードウェア・スレッドが供給されます。オーバーサブスクリプションが発生する可能性がありますが、同時に待機中のデータによるストールを隠蔽するのにも役立ちます• この方法によるスレッドのスケジューリングにはコストがかかるり、スケジューリングを効率良く費用効果を高くするには、すべての EU をできるだ
けビジーにすることが重要です。次のケースでは、スケジューリングの効果は低くなります-計算量が少なすぎる。スケジューリングのオーバーヘッドが、有用な計算を完了するために費やされる時間に匹敵する可能性があります-計算量が多すぎる。スレッド間のワークの分散が不均等になり、GPU のすべての EU の全体的な占有率が低くなる可能性があります21浮動小数点ユニットを使用した SIMD 実行
EU のプライマリー計算ユニットは SIMD 浮動小数点ユニット (FPU) のペアです。これらの FPU は、実際には浮動小数点と整数の両方の計算をサポートしています。次の表は、これらの FPU の SIMD 実行機能を説明したものです22浮動小数点ユニットを使用した SIMD 実行 (続き)EU IPC Rate (EU IPC レート) メトリックは、FPU の飽和状態を示す指標です。たとえば、2 つの非ストールスレッドでマシンの浮動小数点計算スループットが飽和する場合、メトリックは 2 です。通常、このメトリックは理論上の最大値である2 よりも低くなります

FPU が飽和しておりデータ幅が狭い場合、命令レベルの並列処理は不適切であると言えます。この場合、SIMD Width (SIMD 幅) メトリックを確認します23メモリー・サブシステム• Gen9 GT2 GPU には、UMA (Unified MemoryArchitecture) を備えた独自のメモリー・サブシステムが用意されています• このメモリー・サブシステムは、物理メモリーを CPU と共有して、ゼロコピーバッファー転送を効率良く行います• この機能により、CPU と GPU 間のデータ転送が高速化されます24メモリー・サブシステム (続き)Gen9 メモリー・アーキテクチャーでは、各スライスはそのスライスの L3 キャッシュにアクセスできます。スライスはサブスライスで構成されます。各サブスライスには、次のものが含まれます• ローカル・スレッド・ディスパッチャー• 命令キャッシュ

• L3 へのデータポート• 共有ローカルメモリー (SLM)

次のいずれかの方法で、データの局所性を制御できます• 特定のデータアクセス。L3 キャッシュにデータを格納するハードウェアを支援します• ワークグループでアクセス可能なローカルメモリーを割り当てる特別な API。ハードウェアにより SLMで提供されます25インテル® VTune™ プロファイラーの GPU プロファイル
機能を利用
GPU 解析をサポートするように調整されたインテル® VTune™ プロファイラーの主要な機能を取り上げます。次のワークフローは、これらの機能の説明です1.

アプリケーションの GPU オフロード解析を実行します2.

GPU 計算/メディア・ホットスポットのプロファイルを収集します3.

メモリー階層ダイアグラムを使用して、最も効率の悪い計算タスクに取り組みます4.

カーネルで [Instructions Count] プリセット解析を実行します5.

大規模な計算カーネルには、GPU 計算/メディア・ホットスポット解析の [Basic Block Latency] プリセットを使用します

6.

[Memory Latency] プリセットを使用して、重大な実行ストールを示したメモリー・アクセス・コードを調べます7.

目標のパフォーマンス・メトリックになるまで、改善したアルゴリズムで GPU 計算/メディア・ホットスポット解析を繰り返します26

インテル® GPU にオフロードする場合の最適化手法
ヘテロジニアス・アプリケーションは通常、アクセラレーターにオフロードするコード領域を特定して設計されます。オフロードするコード領域を特定できない場合は、インテル® Advisor のオフロードのモデル化 (英語) を使用して特定します
ここでは GPU にオフロードするコードをすでに特定していると仮定しています。次に、ホスト側でオフロードを実装する最適な方法を示します

ステップ 1: デバイスの使用率を調べる
ステップ 2: GPU でのコード実行の効率を定義する
ステップ 3: GPU オフロード解析を実行する
ステップ 4: GPU 計算/メディア・ホットスポット解析を実行する
ステップ 5: 追加のカーネルコードの最適化

27

インテル® VTune™ プロファイラーによる解析例

28

行列サンプル・アプリケーション の例
for (size_t i = 0; i < w; i++)for (size_t j = 0; j < w; j++) {c[i][j] = T{};for (size_t k = 0; k < w; k++)c[i][j] += a[i][k] * b[k][j];}アクセラレーターにオフロードするコード領域を特定します。通常は、最も外側のループが適切な候補です。しかし、この例では、最も内側のループが計算カーネルである可能性があります29

GPU にオフロードするホットな計算タスクを特定推奨事項に従って、まず低い GPU
利用率の原因となる可能性のあるホスト・アクティビティーを調べます
ワークの分散が非効率

30外側のループをオフロード

行列のサイズは 2048 X 2048 に増加し、ウォールクロック・パフォーマンスは 10 倍以上高速でした。[EU Threads Occupancy (EU スレッドの占有期間)] メトリックは 95.7% と高い値です。これは、実行ユニットで利用できる十分なワークがあることを示しています31デバイスの操作によるタスク時間の特徴付け

タイムラインを見ると、データ転送が 100 ミリ秒しかかかっていないのに対して、実行に 800 ミリ秒近くかかっている計算タスクが分かります。このデータ実行とデータ転送の比率は、アルゴリズムを改良することで改善できます32カーネルが計算依存なのかメモリー依存なのかを特定

GPU ホットスポット解析には、いくつかの事前定義済みプロファイルやプリセットが用意されています。これらのプリセットを使用して、メモリーアクセスや計算効率に関連する異なるメトリックを収集できます
カーネル実行を適切に理解できるように、[Full Compute (完全な計算)] プリセットを使用しました。このプリセットの情報から、カーネルの実行で、EU FPU が63.5% の時間しかアクティブでなかったことが分かります33

GPU メモリー・サブシステムのカーネルデータ転送

34

タイル化された乗算の実装
i, j // グローバル・インデックス
for (size_t tidx = 0; tidx < TILE_COUNT; tidx++)
ti, tj // ローカル・インデックス
ai, aj, bi, bj // global to local idx
ta[ti, tj] = a[ai, aj]
tb[ti, tj] = b[ai, aj]for (size_t tk = 0; tk < TILE_SIZE; tk++)c[i][j] += ta[ti][tk] * tb[tk][tj];}35タイル化されたカーネルデータ転送 (SLM)36

改善の余地はあるか : 理論上の最小時間を計算
Gen9 GT2 GPU アーキテクチャーのパラメーターから、この GPU には 24 の EUが含まれていることが分かります
各 EU には 2 つの FPU (SIMD-4) があります。各 FPU は 2 つの演算 (乗算+加算) を実行できます。最大コア
周波数は 1.20GHz で、最大 FP パフォーマンスは次のとおりです
24 * 2 * 4 * 2 = 384 FLOP/サイクル (32 ビット浮動小数点)384 * 1.2 = 460.8 GFLOPS

行列乗算実装の FP 演算の数は 2*N3 (N=2048 の場合、約 17.2 GOPS)
理論的には、データアクセスの非効率性および帯域幅の制約による制限がなかった場合、アルゴリズムは17.2 / 460.8 = 0.037 秒 (37 ミリ秒) で計算できます

カーネルで実行された最良の時間は 490 ミリ秒であり、理論上の計算時間よりも 10 倍以上遅くなっています
つまり、パフォーマンスを向上する余地はまだあります37

スケーリング・パフォーマンス
行列乗算サンプルのような高度に並列化されたアプリケーションは、GPU リソースが増加することにより効率が向上しますGen9 シリーズの GPU には、48 の EU を含む
GT3 と 72 の EU を含む GT4 があります
しかし、組込み型の GPU には基本的な領域の制限があり、スケーリングを高めるために EUを追加したり、データアクセスを高速化するた
めにキャッシュブロックを大きくしたりすることはできません
ディスクリート GPU では、領域や電力の制約による制限は少なくなります。システムで 1 つまたは複数の GPU との統合が許可されている場合、アクセラレーターのパフォーマンスをスケールアップできます

インテル® Iris® Xe MAX マイクロアーキテクチャーの高レベルのビュー

38インテル® Iris® Xe MAX GPU の例
タイル化されたカーネルのタイミング
Gen9

インテル® Iris® Xe MAX• カーネル実行は約 4 倍高速化されました

Gen9 GPU の 24 の EU に対してインテル® Iris® Xe MAX GPU には 96 の EU が含まれていることから、これは予想どおりの結果と言えます39

改善の余地はあるか
次の表を見ると、EU が実行中に 51% の時間でまだストールしていることが分かります。これは、(一般的な行列アルゴリズムでよく知られている) メモリーからのデータの待機が原因であると考えられます。具体的な原因を調べます

タイル化されたカーネルの EU Array (EU アレイ) メトリック

最大帯域幅の割合を見ると、L3 と GPU メモリーの帯域幅は最大値からかなり離れているため、ボトルネックではないことが分かります40インテル® Iris® Xe MAX マイクロアーキテクチャー
メモリー階層ダイアグラムで全体像を把握
行列 a と行列 b のデータが PCIe* 経由で GTI に転送されます測定されたデータ読み取り速度は GTI
インターフェイスで 38GB/秒

PCIe* 3.0 ×16 の理論上の最大値は片方向で 16GB/秒であるため、PCIe* の帯域幅に制限されていることが分かります41最適化のヒント• すべてのデータは VRAM と EU ストールからフェッチされています。これは、ビデオメモリーから EU へのデータ移動のレイテンシーで定義されます• EU と L3 間のデータ・トラフィックは GTI と外部トラフィック・ルーター間のデータ・トラフィックと同じであるため、L3 キャッシュを適切に再利用することにより、パフォーマンスをさらに最適化できます
例えば、各 GPU スライスの L3 キャッシュに収まるブロックサイズで、セカンドレベルの行列タイリングを行います

42

まとめ
一般に、ヘテロジニアス・アプリケーションでは、特定のワークロードをアクセラレーターにオフロードする場合、GPU などの超並列アクセラレーター・マシンに十分な計算タスクを提供することが不可欠です•

オフロードしたタスクのデータ転送とタスク・スケジューリングのオーバーヘッドを予測することにより、GPUの効率を向上します•インテル® VTune™ プロファイラーの GPU オフロード解析の [GPU Utilization (GPU 利用率)] メトリック
および [GPU Occupancy (GPU 占有率)] メトリックを使用して、GPU 使用の非効率性を予測します•

計算タスク実行のパフォーマンスは、実行ユニットの不足、メモリー・サブシステムまたはインターフェイスのボトルネックの存在など、いくつかのマイクロアーキテクチャーの要因によって制限される場合がありますGPU 計算/メディア・ホットスポット解析を実行して、これらの制限を特定します。GPU メモリー階層ダイアグラムのボトルネックと、すべての計算タスクの詳細なマイクロアーキテクチャーのメトリックをハイライトします。複雑なカーネルの場合、レイテンシー解析を使用して、カーネル内の最も重要なコードを特定します43CPU バージョンの最適化について
https://www.isus.jp/products/oneapi/webinar/
インテル® VTune™ プロファイラー 2020に含まれるサンプルコードを使用して、プログラムの最適化ステップでどのようにプロファイラーを活用できるか、収集されたパフォーマンス・データの解釈を含めて解説します。
®

インテル VTune™ プロファイ
オンデマンド ラー入門: サンプルコードを使用 このセッションは 2 つのパートに分かれ 初心者向けしてツールの使い方を理解する ています。パート 1 では、同一プラットフォームの最適化ステップでパフォーマンス・データがどのように変化するかを説明します。パート 2 では、同一プログラムを異なるプラットフォームで実行した際にパフォーマンス・データがどのように変化するかを説明します。

PDF 資料 /ウェビナー動画(パート 1) /ウェビナー動画(パート 2)44

著作権と商標についておよび最適化に関する注意事項▪ 性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。
SYSmark* や MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。
結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。詳細については、www.intel.com/benchmarks (英語) を参照してください。
▪ 本資料に掲載されている情報は現状のまま提供され、いかなる保証もいたしません。本資料は、明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず、いかなる知的財産権のライセンスを許諾するためのものではありません。製品に付属の売買契約書『Intel's Terms and Conditionsof Sale』に規定されている場合を除き、インテルはいかなる責任を負うものではなく、またインテル製品の販売や使用に関する明示または黙示の保証（特定目的への適合性、商品性に関する保証、第三者の特許権、著作権、その他、知的財産権の侵害への保証を含む）をするものではありません。

▪ © 2021 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

最適化に関する注意事項

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

46

47