複数のカーネル インスタンスの作成 - 2021.1 Japanese

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

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

デフォルトでは、リンカーによりカーネルから 1 つのハードウェア インスタンスがビルドされます。ホスト プログラムで同じカーネルが複数回実行される場合、インスタンスのデータ処理要件により、ハードウェア アクセラレータ上のカーネルを順次実行する必要があります。これは、全体的なアプリケーション パフォーマンスに影響します。カーネルのリンク段階をカスタマイズすると、1 つのカーネルに対して複数のハードウェア計算ユニットをインスタンシエートできます。これにより、ホスト プログラムでカーネルをオーバーラップさせて複数呼び出すことができ、個別の計算ユニットを実行することによりカーネルを同時実行できます。

1 つのカーネルに対して複数の CU を作成するには、リンク時に v++ 設定ファイルで connectivity.nk を使用します。設定ファイルに必要なオプションを含め、その設定ファイルを v++ コマンド ラインで --config オプションを使用して指定します (Vitis コンパイラ コマンド を参照)。

たとえば、vadd カーネルに対して 2 つのハードウェア インスタンスをインプリメントするには、設定ファイルで次を使用します。
[connectivity]
#nk=<kernel name>:<number>:<cu_name>.<cu_name>...
nk=vadd:2

説明:

<kernel_name>
複数回インスタンシエートするカーネルの名前を指定します。
<number>
ハードウェアにインプリメントするカーネル インスタンス (CU) の数を指定します。
<cu_name>.<cu_name>...
指定した数のインスタンスの名前を指定します。これはオプションで、指定しない場合の CU のデフォルト名は kernel_1 です。
そして、この設定ファイルを v++ コマンド ラインで指定します。
v++ --config vadd_config.cfg ...

上記の vadd の例では、vadd_1 および vadd_2 という名前の 2 つの vadd カーネル インスタンスが作成されます。

ヒント: 結果は、xclbinutil コマンドを使用して xclbin ファイルの内容から確認できます。xclbinutil ユーティリティ を参照してください。
次の例では、xclbin バイナリ ファイルに、vadd_Xvadd_Y、および vadd_Z という名前の vadd カーネルの CU が 3 つ作成されます。
[connectivity]
nk=vadd:3:vadd_X.vadd_Y.vadd_Z