遅延イベント トレースの使用 - 2023.2 日本語

AI エンジン ツールおよびフロー ユーザー ガイド (UG1076)

Document ID
UG1076
Release Date
2023-12-04
Version
2023.2 日本語

DDR で利用できるトレース バッファーがフルになると、表示および解析可能なイベント トレースの制御が大幅に制限されます。これに対処するため、時間、反復、またはユーザー定義のイベントに基づいて、イベント トレースを遅らせることができます。

実行時間が長い複雑なデザインのイベント トレースを表示し、一方でトレース バッファーには完全なイベント トレース情報を保持できる余裕がない場合を想定します。このような場合、初期トレースを開き、カーネルが理想的な状態になっている概算時間を見積もることができます。この情報に基づいて、表 1 および表 1の例にあるように、start_time オプションを使用してイベント トレースの開始時間を指定できます。xrt.ini ファイルの値を繰り返し、ハードウェアでアプリケーションを実行し、Vitis IDE でトレース情報を表示させることができます。

グラフが 100 回反復実行され、一方でバッファーには反復 10 回分のトレース情報しか保持できないという別のシナリオを考えてみます。この場合、90 回目の反復でイベント トレース情報を取得するには、オプション start_iteration=90 を使用して反復値を指定し、反復に基づいてイベント トレースの開始を遅らせることができます。反復値に基づいてトレース情報を取得するためには、次を実行する必要があります。

  • 表 10の説明にあるとおり、オプション --graph-iterator-event を使用してグラフを再コンパイルします。
  • アップデートされた libadf.a を v++ パッケージを使用して再パッケージします。
  • sd_card イメージを再生成します。

イベント トレースの生成には、XRT フローまたは XSDB フローを使用できます。

カーネル コードで指定したユーザー定義のイベントに基づいて、イベント トレースを遅らせることもできます。たとえば、次のコードでは組み込み関数の event0() が使用されています。

void kernel_w_2048_1(input_window_cint16 * in, output_window_cint16 * out)
{
      cint16 c1, c2, cout;
      for (unsigned i=0; i<2048; i++)
      {
            c1 = in.data();
            c2 = out.data();
            c2.real = c1.real+c1.imag;
            c2.imag = c1.real-c1.imag;
            if(c2.real == 50)  
                event0();
        }
}

上記の例では、c2 の実数値が 50 のときに、event0() がトリガーされます。このユーザー定義イベントに対応するトレース情報を表示するには、XSDB フローまたは XRT フローで、オプション start_typekernel_event0 を指定し、イベント トレースを生成します。

組み込み関数 event0() の詳細は、 『AI エンジン組み込み関数ユーザー ガイド』 (UG1078)イベントを参照してください。

AI エンジン タイルごとに使用できるのは、1 つの event0() のみです。異なる AI エンジン タイルにマップされている複数のカーネルには複数のイベントを指定できます。

注記: 反復ベースの遅延とイベント ベースの遅延の両方で、組み込み関数 event0() が使用されます。したがって、イベント ベースの遅延に event0() 組み込み関数を使用するためには、必ずコンパイル オプション --graph-iterator-event を削除し、アップデートされた libadf.a を使用して sd_card イメージを再度生成する必要があります。

start_time を 1 ms に指定した遅延イベント トレースの例は、Vitis IDE では次のように表示されます。左上のハイライト部分は、この場合は、表示されているトレースが遅延されていることを意味します。ハイライト部分にカーソルを合わせると、詳細が表示されます。

図 1. 遅延イベント トレース