vox*_*ree 6 buffer swap opencl
正如标题所示,我正在寻找如何有效地交换两个OpenCL缓冲区.我的内核使用两个gloabl缓冲区,一个作为输入,一个作为输出.不过,我调用我的内核的具有相同NDRange,每段时间设定内核参数,入队内核,并且交换缓冲区,因为以前的输出缓冲区将是下一次迭代的输入缓冲区种子循环.
交换这两个缓冲区的适当方法是什么?我想将缓冲区复制回主机到已经malloc的数组之一并使用它将其复制到下一个输入缓冲区clEnqueueWriteBuffer()
,这clEnqueueReadBuffer()
是一种低效的方法.否则我只是使用临时cl_mem
变量来进行交换.
Sim*_*mon 11
你不需要,只需clSetKernelArg
在第二次排队内核(使用clEnqueueNDRangeKernel
)之前设置正确的内核args .缓冲区将保留在设备上,不会将任何内容复制回主机.
CL_MEM_READ_WRITE
当然,在这种情况下必须创建缓冲区.