デフォルトでは、リンカーによりカーネルから 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
カーネル インスタンスが作成されます。
次の例では、
xclbin
バイナリ ファイルに、vadd_X
、vadd_Y
、および vadd_Z
という名前の vadd
カーネルの CU が 3 つ作成されます。[connectivity]
nk=vadd:3:vadd_X.vadd_Y.vadd_Z