C コードのプロファイリング - 2021.2 Japanese

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

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

C コードで提供される関数は次のとおりです。

xrtURStart()
指定された ID のアクティビティの測定範囲の開始時刻を設定します。関数シグネチャは、次のとおりです。
void xrtURStart(unsigned int id, const char* label, const char* tooltip)
xrtUREnd()
指定された ID で測定範囲の終了時刻をマークします。関数シグネチャは、次のとおりです。
void xrtUREnd(unsigned int id) 
xrtUEMark()
特定の時点で発生するイベントをマークし、指定したラベルをタイムライン トレースに追加します。関数シグネチャは、次のとおりです。
void xrtUEMark(const char* label) 

xrtURStart() および xrtUREnd() 関数を使用して、時間追跡をすぐに開始し、開始/終了呼び出しをペアリングする ID を指定して、ユーザー範囲を定義します。user_range 関数の使用方法の詳細は、次のとおりです。

  • 1 つの ID の開始/終了範囲は、別の ID のほかの開始/終了範囲内で指定できます。
  • 必ずプロファイルする開始/終了範囲の ID が一致していることを確認してください。
    重要: 同じ ID で xrtURStart および xrtUREnd への複数の呼び出しがあると、予期しない動作が発生する可能性があります。
  • ユーザー範囲にはラベルを付けてタイムラインに追加できるほか、ユーザー範囲の上にカーソルを置くと表示されるツールヒントを含めることができます。

xrtUEMark() を呼び出すと、イベントの時点でタイムライン トレース上にユーザー マーカーが作成されます。

  • xrtUEMark() では、イベントのラベルを指定できます。ラベルはタイムラインにマークと共に表示されます。
  • ラベルに NULL を使用すると、ラベルのないマークを追加できます。

コードの例は次のとおりです。

int main(int argc, char* argv[]) {
 58 
 59   xrtURStart(0, "Software execution", "Whole program execution") ;
 60 ...
 61   //TARGET_DEVICE macro needs to be passed from gcc command line
 62   if(argc != 2) {
 63       std::cout << "Usage: " << argv[0] <<" <xclbin>" << std::endl;
 64       return EXIT_FAILURE;
 65    }
....
153     q.enqueueTask(krnl_vector_add);
154 
155     // The result of the previous kernel execution will need to be retrieved in
156     // order to view the results. This call will transfer the data from FPGA to
157     // source_results vector
158     q.enqueueMigrateMemObjects({buffer_result},CL_MIGRATE_MEM_OBJECT_HOST);
159 ····
160     q.finish();
161 
162     xrtUEMark("Starting verification") ;
163