Opencl 同时启动内核时,要将哪个命令队列传递给clEnqueueCopyBuffer?
因此,我正在用OpenCL实现一个使用通道的Kmeans集群算法:这是Intel的OpenCL FPGA SDK的一项功能。 为了保持简洁,这意味着我有两个内核必须在不同的命令队列上排队,以便它们同时运行。我想在每次迭代时将Opencl 同时启动内核时,要将哪个命令队列传递给clEnqueueCopyBuffer?,opencl,fpga,Opencl,Fpga,因此,我正在用OpenCL实现一个使用通道的Kmeans集群算法:这是Intel的OpenCL FPGA SDK的一项功能。 为了保持简洁,这意味着我有两个内核必须在不同的命令队列上排队,以便它们同时运行。我想在每次迭代时将cl_mem缓冲区从一个内核复制到另一个内核(这是针对4个集群的,所以在小的方面),其中一部分需要调用clEnqueueCopyBuffer。这需要向函数传递一个命令队列,但我不知道它是要复制缓冲区队列还是要复制缓冲区队列 以下是OpenCL规范对命令队列参数的所有说明: 复
cl_mem
缓冲区从一个内核复制到另一个内核(这是针对4个集群的,所以在小的方面),其中一部分需要调用clEnqueueCopyBuffer
。这需要向函数传递一个命令队列,但我不知道它是要复制缓冲区队列还是要复制缓冲区队列
以下是OpenCL规范对命令队列参数的所有说明:
复制命令将在其中排队的命令队列。与command_queue
、src_buffer
和dst_buffer
关联的OpenCL上下文必须相同。
我可以确认这些内核实际上是在同一个上下文中 您可以使用任意一个命令队列,但需要从复制操作中获取一个事件,以传递给另一个命令队列上的另一个内核队列。否则,它可能会在复制完成之前启动。调用clFinish两次(每个命令队列一次)是否可以代替使用事件来完成此操作?是的,实际上,您只需要在执行复制操作的命令队列上调用它一次。将内核排入另一个命令队列之前(因为您要避免的情况是,另一个命令队列内核在复制完成之前启动)。