アプリケーションでのプロファイリングのイネーブル - 2022.1 日本語

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

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 日本語

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

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

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

表 1. ホストおよびカーネルのプロファイル
プロファイル/トレース 説明 コメント
ホスト アプリケーションの OpenCL API および一部の限定されたデバイス側 (カーネル) プロファイリング。 xrt.ini ファイルで opencl_trace オプションを指定します。 Vitis アナライザーで表示する opencl_trace.csv ファイルおよび xrt.run_summary を生成します。
ホスト アプリケーションの XRT ネイティブ API xrt.ini ファイルで native_xrt_trace オプションを指定します。 ホスト プログラミング で説明するように、XRT API のプロファイル サマリおよびトレース イベントを生成します。
ホスト アプリケーションのユーザー イベント プロファイリング ホスト アプリケーションのカスタム プロファイリング に示すように、ホスト アプリケーションにコードを追加する必要があります。 ホスト アプリケーションのユーザー範囲データおよびユーザー イベントを生成します。
ヒント: ユーザー管理のカーネルと引数バッファーの設定 で説明するように、ユーザー管理カーネルのイベント データを取り込むために使用できます。
オーバーヘッドの少ないプロファイリング xrt.ini ファイルで lop_trace オプションを指定します。 オーバーヘッドの少ないプロファイリングのイネーブル に示すように、lop_trace.csv ファイルを生成します。
デバイス側プロファイリング --profile オプション で説明するように、v++ コンパイルおよびリンク時に --profile オプションを使用し、xrt.ini ファイルで device_trace を使用すると、イネーブルになります。 ホストとカーネル間のデータ トラフィック、カーネルの停止、カーネルと計算ユニット (CU) の実行時間を取得するほか、Versal AI エンジン の動作を監視します。
AI エンジン グラフとカーネル xrt.ini ファイルで aie_profile および aie_trace オプションを指定します。これらのオプションは、一緒に指定することも、別々に指定することもできます。 aie_profile_<device>.csv および aie_trace_##_<stream id>.txt レポートを生成します。
消費電力プロファイル xrt.ini ファイルで power_profile オプションを指定します。 power_profile_<device>.csv レポートを生成します。
ヒント: この機能は、AWS などの特定のプラットフォームではサポートされません。
Vitis AI プロファイリング xrt.ini ファイルで vitis_ai_profile オプションを指定します。 DPU のカウンター プロファイリングをイネーブルにして、opencl_summary.csv ファイルを生成し、Vitis アナライザーで表示する xrt.run_summary を生成します。

デバイス バイナリ (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_trace=true
power_profile=true
device_trace=fine
stall_trace=all

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

[Emulation]
debug_mode=batch

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

--profile.trace_memory
トレース データの収集に使用するメモリのタイプを示します。
trace_buffer_size
アプリケーション ランタイム中にトレース データを収集するのに使用するメモリの容量を指定します。
ヒント: xrt.ini ファイル--profile.trace_memory が指定されていなくても、device_trace がイネーブルになっている場合、プロファイル データはデフォルトのプラットフォーム メモリに取り込まれ、トレース バッファー サイズに 1 MB が割り当てられます。

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