時間的なデータ並列処理: ホストからカーネルへのデータフロー で説明したように、カーネルが前のトランザクションからのデータを処理中にさらにデータを受信できる場合、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
ブロック プロトコルを使用すると設定できます。