例を使用したスループット制御の理解 - 2023.2 日本語

Vitis Model Composer ユーザー ガイド (UG1483)

Document ID
UG1483
Release Date
2023-11-15
Version
2023.2 日本語

次のセクションでは、Vitis Model Composer HLS ライブラリ用のオプティカル フローのサンプル デザインを使用し、スループット制御機能を使用する利点について説明します。

図 1. オプティカル フローの例

このデザインでは、次のブロックが使用されています。

  • Data Type Conversion、Subtract、Right Shift、Product
  • Gain、Sum of Elements、および Data Type Conversion を使用した Window Processing ブロック。
  • calculating_roots 関数を使用した Import Function ブロック。
図 2. Window Processing カーネル

これらのブロックすべては、要素ごとのアプリケーション パターンに従って、前述の制限に従います。

重要: スループット制御を使用してサブシステム内で Sum of Elements ブロックを直接使用できるのは限られた場合のみです。この例では、Sum of Elements ブロックが Window Processing ブロック内で使用されていますが、最上位サブシステムで直接使用することはできません。
デフォルトのスループット係数 1 を使用すると、次に示すコードが生成されます。
void
Lucas_Kanade(hls::stream< uint8_t >& ImageIn, hls::stream< uint8_t >& 
    ImageInDelayed, hls::stream< float >& Vx, hls::stream< float >& Vy)
{
    #pragma HLS INTERFACE axis port=ImageIn
    #pragma HLS INTERFACE axis port=ImageInDelayed
    #pragma HLS INTERFACE axis port=Vx
    #pragma HLS INTERFACE axis port=Vy
    #pragma HLS INTERFACE s_axilite port=return
    #pragma HLS dataflow

この IP は入力、画像および遅延画像を AXI4-Stream を介して読み込みます。これらのストリームは、データ幅 8 ビット (1 ピクセル) を使用するようになります。同様に、出力画像のピクセルはデータ幅 8 ビットの AXI4-Stream インターフェイスを介してストリーミングされます。

スループット係数を 4 に設定すると、コードは次のようになります。
void
Lucas_Kanade(hls::stream< xmc::MultiScalar< uint8_t, 4 > >& ImageIn, 
    hls::stream< xmc::MultiScalar< uint8_t, 4 > >& ImageInDelayed, 
    hls::stream< xmc::MultiScalar< float, 4 > >& Vx, 
    hls::stream< xmc::MultiScalar< float, 4 > >& Vy)
{
    #pragma HLS INTERFACE axis port=ImageIn
    #pragma HLS data_pack variable=ImageIn
    #pragma HLS INTERFACE axis port=ImageInDelayed
    #pragma HLS data_pack variable=ImageInDelayed
    #pragma HLS INTERFACE axis port=Vx
    #pragma HLS data_pack variable=Vx
    #pragma HLS INTERFACE axis port=Vy
    #pragma HLS data_pack variable=Vy
    #pragma HLS INTERFACE s_axilite port=return
    #pragma HLS dataflow
この IP は、入力画像の 4 ピクセルと遅延入力画像の 4 ピクセルを、データ幅 32 ビットの AXI4-Stream を介して同時に受信します。IP 内でロジックが複製されるので、4 ピクセルが並列に処理されます。IP は、出力画像の 4 ピクセルをデータ幅 32 ビットの AXI4-Stream インターフェイスを介して送信します。
注記: xmc::MultiScalar<T,N>xmcMultiScalar.h で定義されたテンプレートの struct です。これは T タイプの N 要素の配列を含む struct です。

次の表は、オプティカル フロー デザイン用の Vitis HLS のタイミングおよびリソース見積もりを示しています。

表 1. オプティカル フロー デザインのタイミング/リソース使用量の見積もり
  スループット係数 = 1 スループット係数 = 4 スループット係数 = 8
クロック周波数 300 MHz 300 MHz 300 MHz
レイテンシ/II 41848/41834 10483/10469 5358/5344
BRAM_18k (使用率 %) 5 2 4
DSP48E (使用率 %) 2 9 19
FF (使用率 %) 8 30 59
LUT (使用率 %) 14 36 88

表の 2 行目は開始間隔 (II) を示しています。クロック周波数 300 MHz でスループット係数 4 および 8 の場合、デザインの開始感間隔は、スループット係数 1 の場合の開始間隔と比較すると、約 4 および約 8 の除数でそれぞれ削減されます。このため、スループット係数が増加すると、リソース使用量が増加します。

スループット係数が 1 の場合、II は 41,848 です。このデザインの入力は 200x200 ピクセル画像フレームで、II の値はフレーム全体を処理するクロック数を示します。このような場合、1 ピクセルを処理するのにかかるクロック サイクルは 1 を少し超えます。スループット係数を増加すると、1 フレームを処理する II が低下するので、アプリケーションがクロック サイクルごとに 1 ピクセル以上処理するようになります。