clCreateCommandQueue
API 会为每个器件创建一个或多个命令队列。FPGA 可包含多个内核,这些内核可能相同,也可能不同。开发主机应用时,有 2 种主要的编程方法可用于在器件上执行内核:
- 单个无序命令队列:可通过同一命令队列请求多次内核执行。XRT 会尽快以任意顺序分派内核,以允许在 FPGA 上并发执行内核。
- 多个有序命令队列:从不同的有序命令队列请求每次内核执行。在此类情况下,XRT 会分派来自不同命令队列的内核,通过在器件上并发运行这些内核来提升性能。
建议: 为了提升性能,AMD 建议使用单个无序命令队列,并显式管理事件依赖关系和同步,而不是使用多个命令队列。
以下是创建有序和无序命令队列的标准 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);