この記事は、インテル® デベロッパー・ゾーンに公開されている『Intel® VTune™ Profiler Performance Analysis Cookbook』(2022年12月16日時点) の日本語参考訳です。
本クックブックは、非効率なアルゴリズムやハードウェアの使用状況を把握し、チューニングのアドバイスを提供するツール「インテル® VTune™ プロファイラー」を使って、コードのパフォーマンスを分析する方法論と使用例 (レシピ) を紹介します。
- インテル® VTune™ プロファイラーのダウンロードと製品サポートについては、https://www.xlsoft.com/jp/products/intel/vtune/index.html を参照してください。
- このクックブックのレシピはすべてスケーラブルであり、インテル® VTune™ Amplifier 2018 以降に適用できます。バージョンにより設定がわずかに異なることがあります。
- ベータ版インテル® oneAPI ベース・ツールキット向けのバージョンから、インテル® VTune™ Amplifier の名称がインテル® VTune™ プロファイラーに変わりました。引き続き、インテル® Parallel Studio XE またはインテル® System Studio のコンポーネントとして、あるいはスタンドアロン版のインテル® VTune™ プロファイラーをご利用いただけます。
インテル® VTune™ プロファイラーのドキュメント
- バージョン 2021 以降: オンライン・ドキュメント (英語) | ダウンロード可能なドキュメント (英語)
- バージョン 2020 以前:
このクックブックは、インテル® VTune™ プロファイラーで提供される解析タイプを使用して、パフォーマンスの手法とレシピを紹介します。
- 手法
最初に、チューニング手法、パフォーマンス・メトリック、統計を収集するハードウェア・ソリューションを理解して、パフォーマンス解析を開始します。その後、インテル® VTune™ プロファイラーと従来のインテル® VTune™ Amplifier で利用可能な特定のチューニングや設定レシピにドリルダウンできます。- トップダウン・マイクロアーキテクチャー解析法
アプリケーションが利用可能なハードウェア・リソースをどのように使用しているかを把握し、CPU マイクロアーキテクチャーの利点を活用できるようにします。この情報を得る 1 つの手段として、オンチップのパフォーマンス・モニタリング・ユニット (PMU) を使用する方法があります。 - OpenMP* コード解析
OpenMP* または OpenMP* – MPI ハイブリッド・アプリケーションの CPU 利用率を解析して、潜在的な非効率性の原因を特定します。 - インテル® GPU 向けのソフトウェア最適化
インテル® VTune™ プロファイラーを使用して、インテル® GPU へオフロードする場合のオーバーヘッドを予測します。GPU にオフロードされた計算タスクのパフォーマンスを解析します。 - DPDK アプリケーションのコア使用率
DPDK ベースのアプリケーションにおけるパケット受信のコア使用率を特徴付けるメトリックを調査します。 - DPDK アプリケーションの PCIe* トラフィック
インテル® VTune™ Amplifier の PCIe* 帯域幅メトリックを使用して、パケット・フォワーディングを行う DPDK ベースのアプリケーションの PCIe* トラフィックを調査します。 - DPDK イベント・デバイス・プロファイル
DPDK ベースのアプリケーションの DPDK イベント・デバイス・パイプラインの利用効率を解析して、不均衡な負荷分散やワーカーコアが十分に利用されていない問題を特定します。 - インテル® データ・ダイレクト I/O テクノロジーの効果的な利用
インテル® VTune™ プロファイラーを使用して、インテル® Xeon® プロセッサーのハードウェア機能であるインテル® データ・ダイレクト I/O テクノロジー (インテル® DDIO) の利用効率を明らかにする方法を示します。 - 最新の命令セットを使用して最適化されたポータブルなバイナリーをコンパイルする
移植性を維持しながら最新の命令セットを使用してバイナリーをコンパイルするさまざまな方法を学びます。
- トップダウン・マイクロアーキテクチャー解析法
- 設定レシピ
特定のコード環境でパフォーマンス解析を行うため、システムおよびインテル® VTune™ プロファイラーと従来のインテル® VTune™ Amplifier を設定する方法を詳しく説明します。- フレームグラフを使用してホットなコードパスを解析する
フレームグラフを使用して、Java* ワークロードのホットスポットとホットなコードパスを特定する方法を説明します。 - フレームグラフを使用して C++ アプリケーションの hotspot の観測性を向上する
テンプレート関数や長い関数名に隠れて真の hotspot が観測できないシナリオで、インテル® VTune™ プロファイラーのフレームグラフ機能がどのように役立つかを紹介します。 - マルチプロセッサー・システムにおける NUMA のパフォーマンスへの影響を測定する
プラットフォーム・プロファイラー解析タイプを使用して、マルチプロセッサー・システムにおける NUMA (Non-Uniform Memory Access) のパフォーマンスへの影響を測定する方法を紹介します。 - Unity* でビルドしたゲームのプロファイル
Unity* ゲームエンジンでビルドしたゲームをプロファイルする方法を紹介します。Unity* 環境でインテル® VTune™ プロファイラーを実行し、ゲームをプロファイルします。 - Unreal Engine* でビルドしたゲームのプロファイル
Unreal Engine* でビルドしたゲームをプロファイルする方法を紹介します。Unreal Engine* 環境でインテル® VTune™ プロファイラーを実行し、ゲームをプロファイルします。 - リモートユーザーとして Java* アプリケーションをプロファイルする
ラッパースクリプトを使用して、Java* プロセス・オーケストレーター以外のユーザーとして Java* アプリケーションをプロファイルする方法を紹介します。 - Node.js* の JavaScript* コードのプロファイル
Node.js* をリビルドし、インテル® VTune™ プロファイラーを使用して、JavaScript* フレームとネイティブフレーム (ネイティブコード、例えば、JavaScript* コードから呼び出されたシステム・ライブラリーやネイティブ・ライブラリー) から成る混在モードのコールスタックを含む JavaScript* コードのパフォーマンスを解析するための設定手順を説明します。 - CPU と FPGA (インテル® Arria® 10 GX) の相互作用を解析する
インテル® Arria® 10 GX FPGA を例として、CPU と FPGA の相互作用を解析するためプラットフォームを設定する方法を説明します。 - .NET Core アプリケーションのプロファイル
インテル® VTune™ Amplifier を使用して .NET Core ダイナミックコードをプロファイルし、マネージドコードの hotspot を特定してパフォーマンスが向上するようにアプリケーションを最適化します。 - Amazon Web Services* (AWS*) EC2* インスタンス上のアプリケーションのプロファイル
インテル® VTune™ プロファイラーを使用してパフォーマンスをプロファイルするため、AWS* で VM インスタンスを設定します。 - GitLab* CI でパフォーマンスをプロファイルする
インテル® VTune™ プロファイラーを GitLab* CI パイプラインに統合して、ビルドをプロファイルする方法を説明します。 - ハードウェアベースの hotspot 解析向けに Hyper-V* 仮想マシンを設定する
インテル® VTune™ プロファイラーを使用してハードウェア・パフォーマンスをプロファイルするため、Hyper-V* 環境で仮想マシン・インスタンスを設定します。 - パフォーマンス異常を見つけるアプリケーションのプロファイル
インテル® VTune™ プロファイラーの異常検出解析を使用して、いくつかの要因によるパフォーマンス異常を特定する方法を紹介します。また、これらの異常を修正するための提案も提供します。 - GPU 上で実行する OpenMP* オフロード・アプリケーションのプロファイル
インテル® GPU へオフロードされる OpenMP* アプリケーションをコンパイルする方法を示し、インテル® VTune™ プロファイラーで OpenMP* アプリケーションの GPU 解析 (HPC パフォーマンス特性、GPU オフロード、および GPU 計算/メディア・ホットスポット) を実行して、結果を調査する方法を紹介します。 - GPU 上で実行する SYCL* アプリケーションのプロファイル
SYCL* アプリケーションを作成してコンパイルする方法を紹介します。また、インテル® VTune™ プロファイラーを使用して SYCL* アプリケーションの GPU 解析を実行し、結果を検証する方法も示します。 - FPGA 上での SYCL* アプリケーションのプロファイル
FPGA 上で SYCL* アプリケーションをプロファイルします。このレシピでは、インテル® VTune™ プロファイラーの CPU/FPGA 相互作用解析タイプ (プレビュー機能) に統合されている AOCL プロファイラーを使用します。 - インテルのサンプリング・ドライバーを使用しないハードウェアのプロファイル
この一連のレシピは、インテル® VTune™ プロファイラーでドライバーを使用しない Linux* perf ベースのパフォーマンス・プロファイルを設定して、その利点と制限に対する回避策を理解するのに役立ちます。 - MPI アプリケーションのプロファイル
インテル® VTune™ Amplifier を使用して MPI アプリケーションのインバランスと通信の問題を特定し、アプリケーション・パフォーマンスを向上します。 - Docker* コンテナーでのプロファイル
インテル® VTune™ Amplifier の解析向けに Docker* コンテナを構成して、独立したコンテナー環境で動作しているアプリケーションの hotspot を特定します。 - プロキシーサーバーを介したリモートターゲットのプロファイル
プロキシーサーバーを介してインテル® VTune™ プロファイラーを実行し、リモートターゲットをプロファイルする方法を説明します。 - Singularity* コンテナーでのプロファイル
インテル® VTune™ Amplifier の解析向けに Singularity* コンテナーを構成して、独立したコンテナー環境で動作しているアプリケーションの hotspot を特定します。 - Linux*、Android*、および QNX* のシステムブート時のプロファイル
インテル® VTune™ Amplifier のパフォーマンス解析を Linux*、Android*、および QNX* オペレーティング・システムのブートフローと統合する方法を示します。この解析は、OS ブート時に CPU コアで予想外に長く実行されるアクティビティーを識別するのに役立ちます。これにより、ブート順序のさらに詳しい調査が可能になります。 - インテル® VTune™ プロファイラー・サーバーと Visual Studio* Code およびインテル® DevCloud for oneAPI の併用
このレシピでは、インテル® VTune™ プロファイラーをウェブサーバーとして使用し、リモートの開発マシンでパフォーマンスのチューニングを行う方法を紹介します。例として、リモートマシンにインテル® DevCloud for oneAPI のコンピュート・ノードを使用します。 - HPC クラスターでインテル® VTune™ プロファイラー・サーバーを使用する
ハイパフォーマンス・コンピューティング (HPC) クラスターでインテル® VTune™ プロファイラー・サーバーを使用して、インタラクティブなパフォーマンス・プロファイルやスケジュールされたジョブのパフォーマンス・データにアクセスする方法を説明します。 - コマンドライン・インターフェイスを使用して GPU 上で実行する SYCL* アプリケーションのパフォーマンスを解析
インテル® VTune™ プロファイラーのコマンドライン・インターフェイス (CLI) を使用して、インテル® GPU にオフロードされた SYCL* アプリケーションのパフォーマンスを解析する方法を紹介します。また、収集したデータを使用してレポートをカスタマイズする方法も説明します。
- フレームグラフを使用してホットなコードパスを解析する
- チューニング・レシピ
インテル® VTune™ プロファイラーと従来のインテル® VTune™ Amplifier で検出可能な最も一般的なパフォーマンスの問題を調査し、パフォーマンスを最適化するためのステップを提供します。- セグメント化されたキャッシュ環境におけるキャッシュ関連のレイテンシー問題
キャッシュ・アロケーション・テクノロジー (CAT) を使用して、コア間のキャッシュを分割する際にキャッシュ関連のレイテンシー問題 (キャッシュミス) を制御する方法を示します。 - フォルス・シェアリング
インテル® VTune™ Amplifier の全般解析とメモリーアクセス解析を使用してメモリー依存の linear_regression アプリケーションをプロファイルします。 - 頻繁な DRAM アクセス
インテル® VTune™ Amplifier のマイクロアーキテクチャー全般解析とメモリーアクセス解析を使用してメモリー依存の matrix アプリケーションをプロファイルし、頻繁な DRAM アクセスの原因を理解します。 - 低いポート使用率
インテル® VTune™ Amplifier のマイクロアーキテクチャー全般解析を使用してコア依存の matrix アプリケーションをプロファイルし、低いポート使用率の原因を理解します。また、インテル® Advisor を使用してコンパイラーがベクトル化を行うようにします。 - ページフォルト
インテル® VTune™ プロファイラーのマイクロアーキテクチャー全般、システム概要、メモリー消費解析を使用して、ページフォルトがターゲット・アプリケーションのパフォーマンスに与える影響を特定して測定する方法を説明します。 - 命令キャッシュミス
インテル® VTune™ Amplifier の全般解析を使用してフロントエンド依存のアプリケーションをプロファイルし、PGO オプションを指定して ICache ミスを減らします。 - 非効率な同期
スタック収集を有効にしてインテル® VTune™ Amplifier の高度な hotspot 解析を実行し、コードの非効率な同期を特定する方法を説明します。 - 非効率な TCP/IP 同期
タスク収集を有効にしてインテル® VTune™ Amplifier のロックと待機解析を実行し、コードの非効率な TCP/IP 同期を特定する方法を説明します。 - OS スレッド・マイグレーション
インテル® VTune™ Amplifier の高度な hotspot 解析を使用して NUMA アーキテクチャーの OS スレッド・マイグレーションを特定する手順を説明します。 - OpenMP* インバランスとスケジュール・オーバーヘッド
バリアやスケジュール・オーバーヘッドのインバランスなど、OpenMP* プログラムでよくある並列ボトルネックを検出して修正する方法を説明します。 - 低いプロセッサー・コア利用率: OpenMP* シリアル時間
OpenMP* で並列化されたアプリケーションのシリアル実行部分を特定し、追加の並列化の機会を見つけ、アプリケーションのスケーラビリティーを向上します。 - インテル® TBB アプリケーションのスケジュール・オーバーヘッド
インテル® スレッディング・ビルディング・ブロック (インテル® TBB) アプリケーションのスケジュール・オーバーヘッドを検出して修正する方法を説明します。 - PMDK アプリケーションのオーバーヘッド
PMDK ベースのアプリケーションのメモリーアクセスのオーバーヘッドを検出して修正する方法を説明します。
- セグメント化されたキャッシュ環境におけるキャッシュ関連のレイテンシー問題
- 法務上の注意書き (英語)