デフォルトでは、カーネルがリンクされる場合、すべてのカーネルからのメモリ インターフェイスが 1 つのデフォルトのグローバル メモリ バンクに接続されます。そのため、グローバル メモリ バンクとデータを転送できるのは一度に 1 つの計算ユニット (CU) のみになり、アプリケーションの全体的なパフォーマンスが制限されます。FPGA にグローバル メモリ バンクが 1 つしか含まれていない場合は、これしかオプションがありません。デバイスに複数のグローバル メモリ バンクが含まれる場合は、カーネル リンク中にそのグローバル メモリ バンクの接続をカスタマイズして、デフォルトの接続を変更できます。詳細は、カーネル ポートのグローバル メモリへのマップ を参照してください。全体的なパフォーマンスは、異なるカーネルまたは計算ユニットに対して別のメモリ バンクを使用して、複数のカーネル メモリ インターフェイスが同時にデータを読み出しおよび書き込みできるようにすると改善します。
重要: XRT はカーネルのメモリ接続を検出して、データをホスト プログラムからカーネルの正しいメモリ位置に送信する必要があります。XRT では、
clSetKernelArgs
がバッファーのエンキュー操作 (たとえば clEnqueueMigrateMemObject
) よりも前に使用されると、自動的にカーネル バイナリ ファイルからバッファー位置を検出するようになっています。