この記事は、インテルのウェブサイトで公開されている「8 Ways to Analyze, Tune, and Maximize Your Application Performance With Intel® VTune™ Profiler」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
この記事の PDF 版はこちらからご利用になれます。
今日の開発者は、アプリケーションの開発と保守を行う際に、さまざまなハードウェアおよびソフトウェア・ツールを利用できます。ソフトウェア・レベルでは、C、C++、SYCL、C#、Java、Python、Fortran、アセンブリー、Google Go などのプログラミング言語、.NET フレームワークおよびその他のソフトウェア・オプション、またはそれらの組み合わせを選択できます。ハードウェア・レベルでは、CPU だけでなく、GPU や FPGA などのアクセラレーション・アーキテクチャーにアプリケーションをデプロイできます。
アプリケーションの実行にはさまざまなツールとプラットフォームが採用されており、メモリー使用量、電力消費、レイテンシーなどのさまざまな要因によってアプリケーション・パフォーマンスが決まります。
アプリケーション・パフォーマンスを最大化したい開発者向けに、インテル® oneAPI ツールには、アプリケーションのパフォーマンス・ボトルネックを調査して修正するインテル® VTune™ プロファイラーというワンストップ・ソリューションが用意されており、さまざまなソフトウェアおよびハードウェア・ツールの組み合わせにわたるパフォーマンスの問題に容易に対応できます。
インテル® VTune™ プロファイラーは、ワークロードのパフォーマンスを妨げている可能性のあるコードを特定するだけでなく、次の機能も提供します。
- 特定した問題の性質に関する情報を提供し、改善と解決に関する推奨事項を提示します。
- ソースコードの問題やアーキテクチャーのボトルネックなど、アプリケーション・パフォーマンスに影響を与えるさまざまな要因の解析に役立ちます。ハードウェア・レベルとソフトウェア・レベルの両方のパフォーマンスの問題をカバーします。
- 専用ハードウェアによって高速化される領域かどうかに関係なく、アプリケーションのすべての領域をファイン・チューニングできます。
この記事では、インテル® VTune™ プロファイラーで実行できる主なアプリケーション・パフォーマンス解析タイプを紹介します (注: ツールの詳細については、記事の最後にある関連リソースを参照してください)。
インテル® VTune™ プロファイラーの利点
インテル® VTune™ プロファイラーは、アプリケーションの実行に関する詳細な情報を提供し、プログラムの動作を測定するため、「プロファイラー」と呼ばれます。Windows および Linux ホストで利用できますが、CPU、GPU、FPGA などのアーキテクチャー上の Android、QNX、FreeBSD を含むさまざまなプラットフォームで実行されるコードをプロファイルできます。
次のことが行えます。
- プログラムの並列パフォーマンスの評価
- ホットスポットの解析
- 異常検出
- キャッシュミスの検出
- メモリー消費量の測定
- I/O 集約型アプリケーションのパフォーマンス・ボトルネックの検出、ほか
それでは、実行可能な 8 つの重要なアプリケーション・パフォーマンス解析タイプについて見てみましょう。
1. CPU 使用問題のホットスポット解析
インテル® VTune™ プロファイラーで特定して解析できる、パフォーマンスに影響を及ぼす最も重要な要因の 1 つは、ホットスポットです。ホットスポットとは、プログラムの中で多くの実行時間を費やしている領域です。
ホットスポット解析は、アルゴリズムを解析するアプリケーション・フローを理解する開始点となります。インテル® VTune™ プロファイラーを使用すると、上位のホットスポット、CPU 時間、アプリケーション全体の CPU 使用率、およびホットスポット関数ごとの CPU 使用率、フレームレート、メモリー帯域幅、特定の関数の親関数と子関数、およびそのパフォーマンス・メトリックなど、アプリケーションのさまざまな要因を解析できます。
注:
ホットスポット解析は、プロセッサーのパフォーマンス・モニタリング・ユニット (PMU) のイベントカウンターを利用しなくても実行できます。そのため、開発者がテストシステムの管理者権限やルート権限を持っていなくても、OS タイマーベースのサンプリングで利用できます。ハードウェア・イベントベース・サンプリングとシステム・アーキテクチャー・イベントベース・サンプリングでは、テスト対象のプラットフォームに収集ドライバーをインストールする必要があります。ほとんどの場合、これはユーザーの介入を必要とせず、インテル® VTune™ プロファイラーのインストーラーによって自動的に処理されます。
ソースコード・レベル解析には、バイナリーとアプリケーション・シンボル情報、およびファイルシステム上のソースファイルの場所が必要です。
→ インテル® VTune™ プロファイラーのデータコレクターの設定 [5:49] (英語)
ホットスポット・ビューポイントで利用可能なパフォーマンス結果は、体系的な一連の手順に従って解釈されます。
- 経過時間 (アプリケーションの開始から終了までの時間) をベースラインとして定義し、最適化の前と後のアプリケーション・パフォーマンスを比較します。
- 上位のホットスポット (実行時間を最も費やしている関数) を特定します。
- アルゴリズム内の関数の呼び出しシーケンスに関する問題を特定します。
- ホットスポット関数を含むソースコードを解析します。
→ インテル® VTune™ プロファイラーのホットスポット解析の詳細
2. 異常検出
ホットスポット以外にも、ループ反復などの頻繁に繰り返されるコード領域には、短期的で非決定的な問題がいくつか存在します。このような異常は回復不可能な問題を引き起こす可能性があるため、タイムリーに検出する必要があります。
インテル® VTune™ プロファイラーでは、インテル® プロセッサー・トレース・テクノロジー (英語) とインストルメンテーションおよびトレーシング・テクノロジー (ITT) API (英語) 利用してパフォーマンスの異常を特定できます。
注: 異常検出解析はプレビュー機能であり、インテル® VTune™ プロファイラーの将来のバージョンでサポートされる保証はありません。
3. メモリー消費と割り当て解析
潜在的なパフォーマンス問題を引き起こす可能性のあるコード領域の特定に加えて、アプリケーションのさまざまな領域によるメモリー使用量を解析すると、パフォーマンスをさらに最適化できます。
インテル® VTune™ プロファイラーは、メモリーを最も消費している関数を特定できるほか、コードの安定性の問題につながる連続するメモリー割り当てにフラグを付けることができます。また、各関数のメモリー割り当てスタックとソースモジュールに関する情報も抽出できます。
4. ハードウェアとメモリーの問題のトリアージ
インテル® VTune™ プロファイラーは、トップダウンのマイクロアーキテクチャー解析を表示するため、ハードウェアの非効率性の原因となっているマイクロアーキテクチャーの特定の部分に注目して最適化できます。時間のかかるコード領域の解析が完了したら、マイクロアーキテクチャー全般解析により、コードがコア・パイプラインをどのように通過するかを理解することで、アプリケーションのハードウェア・レベルのパフォーマンス問題を検出できます。
また、インテル® VTune™ プロファイラーは、メモリーのロード/ストア、最終レベルキャッシュ (LLC) ミス、リモート DRAM へのメモリー要求などに関する情報を提供するさまざまなメトリックを通じて、キャッシュミス、メモリー帯域幅の高い使用、NUMA (Non-Uniform Memory Access) などのメモリー関連のボトルネックの解析にも役立ちます (利用可能なメトリックの一覧はこちら)。
→ インテル® VTune™ プロファイラーを使用して ハードウェアの問題、キャッシュミスと帯域幅の問題を解析する方法
5. 並列計算のスレッド効率と HPC パフォーマンスの解析
並列処理は、計算集約型アプリケーションの核心と言えます。並列処理の効率は、アプリケーションがハードウェア・リソースをいかに効果良く利用して並列処理を実現するかに大きく依存します。インテル® VTune™ プロファイラーのスレッド化解析と HPC パフォーマンス解析は、効率を推定するのに役立ちます。
スレッド化解析により、スレッドランタイムの非効率的な使用や同期中のスレッド競合問題など、利用可能なプロセッサー・コアが十分に活用されない根本原因を特定し、プロセッサー・コアとハイパースレッド間のワークロード・バランスを改善できます。
また、スレッドとタスクの実行コア・アフィニティーの改善の可能性も示されます。アプリケーションのスレッド数、I/O または同期オブジェクトでのスレッド待機時間、スピン時間、オーバーヘッド時間などの要因を解析して、コアの使用効率を判断できます。これは、インテル® Advisor などのツールによって提案されたスレッド割り当ての効率を検証するのに非常に役立ちます。
→ インテル® VTune™ プロファイラーのスレッドか解析 (英語)
計算集約型でデータ・スループットを重視するアプリケーションの場合、インテル® VTune™ プロファイラーを使用して、CPU、メモリー、浮動小数点演算ハードウェア・リソースがどの程度効果的に使用されているかを推定できます。インテル® VTune™ プロファイラーのデータコレクターは、特定のアプリケーションのパフォーマンス・データをすべて収集します。また、必要に応じて、システム全体のパフォーマンスの詳細を限定的に収集することもできます。
→ スレッド化解析とHPC パフォーマンス特性解析の詳細
6. I/O パフォーマンス解析
インテル® VTune™ プロファイラーでは、I/O 集約型アプリケーションのハードウェアとソフトウェアのボトルネックを解析できます。次の主要なパフォーマンス・メトリック・タイプを使用して、詳細な解析を行うことができます。
- プラットフォーム・レベルのメトリックは、プラットフォーム I/O、インテル® ウルトラ・パス・インターコネクト (インテル® UPI)、永続メモリー (PMEM)、および DRAM (Dynamic RAM) を解析するハードウェア・レベルのイベントベースのメトリックを測定します。
- プラットフォーム I/O には、インテル® データ・ダイレクト I/O (インテル® DDIO) テクノロジーの使用効率とメモリーマップ I/O トラフィックが含まれ、CPU と PCIe デバイス、メモリー・マップ・デバイス、および統合アクセラレータ間のデータフローをカバーします。
- OS および API レベルのメトリックは、Linux カーネル I/O、ストレージ・パフォーマンス開発キット (SPDK) (英語) アプリケーション、およびデータプレーン開発キット (DPDK) (英語) アプリケーションの解析に使用できます。
注: インテル® Xeon® プロセッサーでのみすべての I/O 解析メトリックを使用できます。
→ プラットフォーム・パフォーマンス、DPDK アプリケーション、および SPDK アプリケーションを解析して I/O パフォーマンスを向上する方法
7. GPU オフロード解析
アプリケーションにさまざまな CPU コアと GPU コアにまたがる多様なワークロードがある場合、インテル® VTune™ プロファイラーの GPU オフロード解析により、統一された時間領域内のすべてのワークロードを解析できます。次のことが行えます。
- アプリケーションがインテル® メディア SDK、SYCL、OpenCL をどの程度効果的に使用しているかを把握できます。
- CPU と GPU の両方でのコード実行を調べ、アプリケーションが CPU または GPU に依存しているかどうかを判断できます。
- アプリケーションの GPU 使用時間、GPU 消費電力、ホスト CPU と GPU デバイス間のデータ転送効率を推定できます。
- 特定の時点で GPU エンジンのキューに入れられたソフトウェアを解析できます。
→ インテル® VTune™ プロファイラーの GPU オフロード解析
8. Python パフォーマンス解析
インテル® VTune™ プロファイラーを使用して、時間のかかるコードシーケンスや重要なコールパスを特定することで、Python アプリケーションを最適化できます。これにより、アプリケーションが CPU リソースを効果的に使用しているかどうかが分かります。例えば、周辺コードの解釈ではなく、ネイティブ拡張の実行に多くの時間が費やされているかどうかを確認できます。
ホットスポット解析、メモリー消費解析、スレッド化解析を通じて、ワークロードのパフォーマンス・ボトルネックを修正し、利用可能なハードウェアを効率良く使用できます。
注: データ収集とインテル® VTune™ プロファイラーの使用に関する同様の原則は、この記事の冒頭で説明した Java などの他のインタープリター言語にも適用されます。
次のステップ
この記事では、インテル® VTune™ プロファイラーの主な機能のいくつかを簡単に説明しました。このほかにも、ソースコード解析、電力解析、電力および熱スロットリング解析、データビュー、結果ファイル管理などにインテル® VTune™ プロファイラーを活用できます。
今すぐインテル® VTune™ プロファイラーを使い始めましょう!
豊富なアプリケーション・パフォーマンス解析機能が用意されています。インテル® VTune™ プロファイラーのトレーニング・ビデオ・シリーズ (英語) でさまざまなアプリケーションのパフォーマンス・ボトルネックを修正する実践的なデモをご覧ください。
関連資料
インテル® VTune™ プロファイラーの詳細を確認し、ワークロードのプロファイルとチューニングを開始するのに役立つリンクを以下に示します。
- インテル® VTune™ プロファイラー製品ページ
- インテル® VTune™ プロファイラー・ユーザーガイド
- インテル® VTune™ プロファイラー・パフォーマンス解析クックブック
- YouTube で公開されているインテル® VTune™ プロファイラーのトレーニング・ビデオ・シリーズ (英語)
ソフトウェアの入手
インテル® VTune™ プロファイラーは無料で、インテル® oneAPI ベース・ツールキットの一部として、またはスタンドアロン版 (英語) としてインストールできます。インテルの oneAPI ソフトウェア・ポートフォリオにある AI、HPC、およびレンダリング (英語) ツールもぜひご覧ください。一部のバージョンのインテル® VTune™ プロファイラーには、日本語パッケージも用意されています。詳しくはこちらのページをご覧ください。
謝辞
本ブログに貢献してくれた Chandan Damannagari に感謝します。
製品および性能に関する情報
1 性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。