Opencl 同时启动内核时,要将哪个命令队列传递给clEnqueueCopyBuffer?

Opencl 同时启动内核时,要将哪个命令队列传递给clEnqueueCopyBuffer?,opencl,fpga,Opencl,Fpga,因此,我正在用OpenCL实现一个使用通道的Kmeans集群算法:这是Intel的OpenCL FPGA SDK的一项功能。 为了保持简洁,这意味着我有两个内核必须在不同的命令队列上排队,以便它们同时运行。我想在每次迭代时将cl_mem缓冲区从一个内核复制到另一个内核(这是针对4个集群的,所以在小的方面),其中一部分需要调用clEnqueueCopyBuffer。这需要向函数传递一个命令队列,但我不知道它是要复制缓冲区队列还是要复制缓冲区队列 以下是OpenCL规范对命令队列参数的所有说明: 复

因此,我正在用OpenCL实现一个使用通道的Kmeans集群算法:这是Intel的OpenCL FPGA SDK的一项功能。 为了保持简洁,这意味着我有两个内核必须在不同的命令队列上排队,以便它们同时运行。我想在每次迭代时将
cl_mem
缓冲区从一个内核复制到另一个内核(这是针对4个集群的,所以在小的方面),其中一部分需要调用
clEnqueueCopyBuffer
。这需要向函数传递一个命令队列,但我不知道它是要复制缓冲区队列还是要复制缓冲区队列

以下是OpenCL规范对命令队列参数的所有说明:

复制命令将在其中排队的命令队列。与
command_queue
src_buffer
dst_buffer
关联的OpenCL上下文必须相同。
我可以确认这些内核实际上是在同一个上下文中

您可以使用任意一个命令队列,但需要从复制操作中获取一个事件,以传递给另一个命令队列上的另一个内核队列。否则,它可能会在复制完成之前启动。

调用clFinish两次(每个命令队列一次)是否可以代替使用事件来完成此操作?是的,实际上,您只需要在执行复制操作的命令队列上调用它一次。将内核排入另一个命令队列之前(因为您要避免的情况是,另一个命令队列内核在复制完成之前启动)。