clCreateCommandQueue
API は、デバイスごとに 1 つまたは複数のコマンド キューを作成します。FPGA には、同じカーネルまたは異なるカーネルのいずれかの複数のカーネルを含めることができます。ホスト アプリケーションを開発する場合、デバイスでカーネルを実行するためのプログラミング方法が主に 2 つあります。
- 1 つの順不同コマンド キュー: 複数のカーネル実行を同じコマンド キューで要求できます。XRT によりこれらのカーネルができるだけ早く任意の順序で実行され、FPGA 上でのカーネルの同時実行を可能にします。
- 複数の順序どおりのコマンド キュー: 各カーネル実行は異なる順序どおりのコマンド キューから要求されます。このような場合、XRT は異なるコマンド キューからカーネルを実行し、それらがデバイス上で同時に実行されるようになるので、パフォーマンスが改善されます。
推奨: パフォーマンスを向上させるため、ザイリンクスでは、複数のコマンド キューを使用するのではなく、単一のアウト オブ オーダー コマンド キューを使用し、イベントの依存関係と同期を明示的に管理することをお勧めします。
次に、順不同および順序どおりのコマンド キューを作成する標準 API 呼び出しの例を示します。
// Out-of-order Command queue
commands = clCreateCommandQueue(context, device_id, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err);
// In-order Command Queue
commands = clCreateCommandQueue(context, device_id, 0, &err);