正如标题所示,我正在寻找如何有效地交换两个OpenCL缓冲区。我的内核使用两个全局缓冲区,一个作为输入,一个作为输出。但是,我在for循环中调用我的内核,每次设置内核参数、排队内核和交换缓冲区,因为前一个输出缓冲区将成为下一次迭代的输入缓冲区种子。
在这里,适当的方法是什么,以交换这两个缓冲区?我想象一下,将缓冲区复制回主机到已分配的数组之一,并使用
在这里,适当的方法是什么,以交换这两个缓冲区?我想象一下,将缓冲区复制回主机到已分配的数组之一,并使用
clEnqueueWriteBuffer()
和clEnqueueReadBuffer()
将其复制到下一个输入缓冲区中,是一种低效的方法。否则,我只是使用一个临时的cl_mem
变量来进行交换。
setArg
之前使用std::swap(bufferA, bufferB);
,以避免为偶数和奇数迭代使用单独的代码。 - Madcowswe