アプリケーションでのプロファイリングのイネーブル - 2021.1 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2022-03-29
Version
2021.1 Japanese

プロファイリングをイネーブルにし、アプリケーション実行中にイベント トレース データを収集するには、このタスク用にアプリケーションをインストルメント化する必要があります。また、追加のロジックをイネーブルにし、追加のデバイス リソースを使用して、ホストおよびカーネルの実行段階を記録し、イベント データをする必要があります。このプロセスでは、カスタム データを収集するようにホスト アプリケーションを変更し (オプション)、コンパイル時にカーネル XO を変更し、リンク時に xclbin を変更して、デバイス側の動作から異なるタイプのプロファイル データを収集し、アプリケーション ランタイム中にデータが取得されるようにザイリンクス ランタイム (XRT) を設定します (xrt.ini ファイル を参照)。

ヒント: プロファイリング データの収集は、アクセラレーション アプリケーションのビルド時のプロファイリングおよび最適化プロセスに重要ですが、追加のリソースを使用するので、パフォーマンスに影響します。最終的なプロダクション ビルドからは、これらのエレメントを忘れずに削除する必要があります。

アプリケーションのプロファイリングには、システムに含まれる要素や取得するデータの種類に応じて、さまざまな種類があります。次の表に、イネーブルにできるプロファイリングのレベルの一部を示します。また、無償のプロファイルとそうでないプロファイルについて説明します。

表 1. ホストおよびカーネルのプロファイル
プロファイル/トレース 説明 コメント
ホスト アプリケーションの OpenCL API および一部の限定されたデバイス側 (カーネル) プロファイリング。 xrt.ini ファイルで opencl_summary および opencl_trace オプションを指定します。 opencl_summary.csv および opencl_trace.csv ファイルを生成します。
ホスト アプリケーションの XRT ネイティブ API xrt.ini ファイルで native_xrt_trace オプションを指定します。 XRT API のトレース イベントを生成します。
ホスト アプリケーションのユーザー イベント プロファイリング ホスト アプリケーションのカスタム プロファイリング に示すように、ホスト アプリケーションにコードを追加する必要があります。 ホスト アプリケーションのユーザー範囲データおよびユーザー イベントを生成します。
オーバーヘッドの少ないプロファイリング xrt.ini ファイルで lop_trace オプションを指定します。 オーバーヘッドの少ないプロファイリングのイネーブル に示すように、lop_trace.csv ファイルを生成します。

xrt.ini ファイルで opencl_summary=true を指定すると、ディスエーブルになります。

デバイス側プロファイリング --profile オプション に示すように、v++ コンパイル時およびリンク時に --profile オプションを使用するとイネーブルになります。 ホストとカーネル間のデータ トラフィック、カーネルの停止、カーネルと計算ユニット (CU) の実行時間を取得するほか、Versal AI エンジン の動作を監視します。
AI エンジン グラフとカーネル xrt.ini ファイルで aie_profile および aie_trace オプションを指定します。これらのオプションは、一緒に指定することも、別々に指定することもできます。 aie_profile_<device>.csv および aie_trace_##_<stream id>.txt レポートを生成します。

xrt.ini フィルでは profile=true と一緒には使用できません。

ホスト アプリケーションにユーザー イベント プロファイリングが存在しても、ディスエーブルになります。

消費電力プロファイル xrt.ini ファイルで power_profile オプションを指定します。 power_profile_<device>.csv レポートを生成します。
Vitis AI プロファイリング xrt.ini ファイルで vitis_ai_profile オプションを指定します。 DPU のカウンター プロファイリングをイネーブルにして、opencl_summary.csv ファイルを生成します。

xrt.ini ファイルで opencl_summary=true を指定すると、ディスエーブルになります。

デバイス バイナリ (xclbin) ファイルが、デフォルトでデバイス側のプロファイリング データを収集するよう設定されます。ただし、Vitis コンパイラのリンク プロセスで --profile オプションを使用すると、システムにアクセラレーション モニターと AXI パフォーマンス モニターが追加されて、デバイス バイナリがインストルメント化されます。このオプションには、--profile オプション で示すように、--profile.data--profile.stall、および --profile.exec などの複数のインストルメント オプションがあります。

次に、v++ リンク コマンドに --profile.data を追加する例を示します。
v++ -g -l --profile.data all:all:all ...
ヒント: ソフトウェアまたはハードウェア エミュレーションでデバッグできるようにカーネル コードをコンパイルする場合は、必ず v++ -g オプションも使用してください。

v++ コンパイルおよびリンク プロセス中にアプリケーションのプロファイリングをイネーブルにしたら、上記で説明するように、アプリケーション ランタイム中のデータ収集がイネーブルになるように xrt.ini ファイルを編集する必要があります。たとえば、次の xrt.ini ファイルは、アプリケーションの実行時に OpenCL プロファイリング、消費電力プロファイリング、およびイベントとストールのトレース取得をイネーブルにします。

[Debug]
opencl_summary=true
opencl_trace=true
power_profile=true
data_transfer_trace=coarse
stall_trace=all

[Kernel Internals] データのプロファイリングをイネーブルにするには、xrt.ini[Emulation] セクションに debug_mode タグも追加する必要があります。

[Emulation]
debug_mode=batch

大量のトレース データを収集する場合は、v++ リンク中に --trace_memory オプションを指定して、データを取得するのに使用可能なメモリ容量を増やし、xrt.initrace_buffer_size キーワードを追加します。

--trace_memory
トレース データの収集に使用するメモリのタイプを示します (Vitis コンパイラの一般オプション を参照)。
trace_buffer_size
アプリケーション ランタイム中にトレース データを収集するのに使用するメモリの容量を指定します。

連続トレースの取り込み で説明するように、連続トレース キャプチャをイネーブルにして、アプリケーションの実行中にデバイスのトレース データを継続的にオフロードすることもできます。このようにすると、アプリケーションまたはシステムがクラッシュした場合に、トレース データの一部にアクセスできるので、アプリケーションのデバッグに役立ちます。