プロセス実行モード - 2021.1 Japanese

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

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

カーネル プロパティ で説明するように、XRT 管理のカーネルには、2 種類の実行モードがあります。これらのモードは、カーネル コンパイル中に Vitis HLS でカーネルに割り当てられるブロック プロトコルにより決定されます。ブロック プロトコルは、#pragma HLS INTERFACE を使用して指定できます。次に、モードとそれらをイネーブルにするブロック プロトコルを示します。

パイプライン
ap_ctrl_chain のデフォルトのブロック プロトコルによってイネーブルになるので、1 つのカーネルで実行中にカーネルを重複でき、次のタスクの実行を開始しながら 1 つのタスクの実行を終了できます。
シーケンシャル
ap_ctrl_hs でイネーブルになったシリアル アクセス モードの場合、次のタスクを開始する前に、カーネルが 1 つのタスクの実行を完了する必要があります。

これらの実行モードの XRT でのサポートについては、サポートされるカーネル実行モデルを参照してください。

パイプラインの実行

時間的なデータ並列処理: ホストからカーネルへのデータフロー で説明したように、カーネルが前のトランザクションからのデータを処理中にさらにデータを受信できる場合、XRT は次のデータ バッチを送信できます。パイプライン モードでは、複数のカーネル実行を重複させることができるので、全体的なスループットが向上します。

パイプライン モードをサポートするには、カーネルで ap_ctrl_chain プロトコル (Vitis HLS で使用されるデフォルト プロトコル) を使用する必要があります。このプロトコルは、次の例に示すように、関数の戻り値に #pragma HLS INTERFACE を指定することによりイネーブルにすることもできます。

void kernel_name( int *inputs,
                  ...         )// Other input or Output ports
{
#pragma HLS INTERFACE ap_ctrl_chain port=return bundle=control

パイプライン実行が正しく動作するようにするには、カーネルのキューのレイテンシを長くする必要があります。そうでないと、カーネルで各データ バッチを処理するのに十分な時間がなく、パイプラインの利点を活かすことができないことがあります。パイプラインに設定されたカーネルでデータをパイプライン方式で処理できない場合は、シーケンシャル実行に戻ります。

重要: ホストからカーネルへのデータフローの利点を活かすには、ループのパイプライン処理 で説明するようにループ レベルでパイプライン処理、または データフロー最適化 で説明するようにタスク レベルでパイプライン処理するなどして、データが段階的に処理されるようカーネルを記述する必要もあります。

以前の技術との互換性のため、XRT 管理のカーネルでは純粋なシーケンシャル モードもサポートされています。これは、#pragma HLS INTERFACE で関数の戻り値に ap_ctrl_hs ブロック プロトコルを使用すると設定できます。

終了しないモード

デフォルトでは、Vitis HLS でホスト アプリケーションで同期が制御されたカーネルが生成されます。ホストでカーネルの開始と終了が制御および監視されます。ただし、連続するデータ ストリームの場合など、カーネルをホストで制御する必要がないこともあります。これらのカーネルは、ユーザー管理の終わらないカーネルでのデータのストリーミング で説明するように、ap_ctrl_chain ブロック プロトコルの auto_restart 信号を使用できます。これは、ユーザーが ap_start ビットと auto_restart ビットを設定してカーネル実行の開始を指定するので、ユーザー管理のカーネルとみなされますが、初期起動以降はソフトウェアで制御されないカーネルが主に使用されます。