ホスト アプリケーションからのすべての XRT 関連動作は、OpenCL API 呼び出しまたは XRT API 呼び出しのいずれかを使用して、プロファイリングのために自動的にトラックされます。ただし、XRT 関連イベント以外のホスト アプリケーションをプロファイルして、ユーザー指定の動作またはイベントに基づいてイベント データを取得することもできます。
ヒント: これらの機能は、機能とパフォーマンスのベースライン で説明されるようにデザイン プロセスの初期段階で使用でき、ザイリンクス デバイス ハードウェアで実行する関数を分離する前でも使用できます。
この機能には、次の 2 種類のカスタム プロファイリングがあります。
- [User range]
- 指定した開始時刻と終了時刻をコード範囲全体でプロファイルします。これにより、ホスト アプリケーションで動作が発生する期間が取得されます。
- [User events]
- タイムライン内のイベントをマークします。ユーザー イベントは、発生した時点でタイムライン波形に追加されます。
user_range
および user_event
データは、Profile Summary および Timeline Trace レポートに取り込まれ、Vitis アナライザーに表示されます。次の図に示すように、Profile Summary には、特定のイベントの発生回数と範囲が表示されます。[User Ranges] の表には、ホスト コード内のユーザー定義の範囲の最小/最大/平均/合計の時間も表示されます。Timeline Trace レポートには、ホスト コードの user_range
エレメントが別の行に表示され、user_event
マーカーはタイムラインの特定のポイントに追加されます。
図 1. プロファイル サマリの [User Ranges] の表
カスタム プロファイリングを使用するには、ホスト アプリケーションのソース コードとビルド プロセスをいくつか変更する必要があります。次で説明するように、コード内で C または C++ API を使用する必要があります。また、ホスト アプリケーションをリンクするときに、xrt_coreutil
ライブラリを含める必要もあります。
- C/C++ API については次に説明しますが、https://github.com/Xilinx/XRT/blob/master/src/runtime_src/core/include/experimental/xrt_profile.hからも参照できます。
- C と C++ の両方に次を追加する必要があります。
#include experimental/xrt_profile.h
- ホスト コードをリンクする場合は、コンパイラのコマンドラインに
-lxrt_coreutil
を追加します。
ヒント:
user_range
および user_event
の例は、https://github.com/Xilinx/Vitis_Accel_Examples/blob/master/host/debug_profile/src/host.cpp のホスト コードに記載されています。