同时启动内核时,哪个 command_queue 传递给 clEnqueueCopyBuffer?
Which command_queue to pass to clEnqueueCopyBuffer when launching kernels simultaneously?
因此,我正在使用 OpenCL 实现 Kmeans 聚类算法,该算法使用通道:Intel 的 FPGA SDK for OpenCL 的一项功能。
为了保持简洁,这意味着我有两个内核必须在 不同的命令队列 上排队,因此它们 运行 同时。我想在每次迭代时将 cl_mem
缓冲区从一个内核复制到另一个内核(它用于 4 个集群,所以在较小的一侧),其中一部分需要我调用 clEnqueueCopyBuffer
。这需要向函数传递命令队列,但我不知道它是要复制缓冲区的队列还是复制到缓冲区的队列。
这是 OpenCL 规范对 command_queue 参数的全部说明:
The command-queue in which the copy command will be queued. The OpenCL context associated with command_queue
, src_buffer
, and dst_buffer
must be the same.
我可以确认这些内核实际上处于相同的上下文中。
您可以使用任一命令队列,但您需要从复制操作中获取一个事件以传递给另一个命令队列上的另一个内核排队。否则它可能会在复制完成之前开始。
因此,我正在使用 OpenCL 实现 Kmeans 聚类算法,该算法使用通道:Intel 的 FPGA SDK for OpenCL 的一项功能。
为了保持简洁,这意味着我有两个内核必须在 不同的命令队列 上排队,因此它们 运行 同时。我想在每次迭代时将 cl_mem
缓冲区从一个内核复制到另一个内核(它用于 4 个集群,所以在较小的一侧),其中一部分需要我调用 clEnqueueCopyBuffer
。这需要向函数传递命令队列,但我不知道它是要复制缓冲区的队列还是复制到缓冲区的队列。
这是 OpenCL 规范对 command_queue 参数的全部说明:
我可以确认这些内核实际上处于相同的上下文中。The command-queue in which the copy command will be queued. The OpenCL context associated with
command_queue
,src_buffer
, anddst_buffer
must be the same.
您可以使用任一命令队列,但您需要从复制操作中获取一个事件以传递给另一个命令队列上的另一个内核排队。否则它可能会在复制完成之前开始。