我正在开发支持OpenCL 1.2嵌入式配置文件的自定义设备,并且没有图像支持或纹理内存。我必须通过Sobel滤波器然后通过中值滤波器传递图像。这可能是最好(最快)的方式吗?我可以避免在Sobel滤波器之后将图像发送回主机,然后在设备上将其读回中间滤波器吗?在哪里存储中间图像,全局内存,本地内存或其他地方?
答案 0 :(得分:0)
您可以在内核调用之间将缓冲区保留在设备的全局内存中,以避免额外的副本。创建缓冲区时,请确保使用标记“CL_MEM_READ_WRITE”,这将允许Sobel内核写入它,然后使用Median内核从中读取。你可以使用两个缓冲区,但如果内存不是限制,我会使用三个缓冲区。
我省略了其他步骤,例如创建上下文/程序/队列等等,以便专注于你的问题的答案。
Read about clCreateBuffer here.
编辑: 我之前没有尝试过标志'CL_MEM_HOST_NO_ACCESS',但我认为值得一试。在我的例子中,middleBuff可能会从这个标志中受益。与大多数opencl功能一样,任何可能的好处都将取决于实现。