有没有办法将cl_image视为cl_mem?

时间:2015-11-25 05:12:23

标签: opencl

我一直致力于加速用OpenCL编写的一些图像处理代码,而且我发现对于我的内核,缓冲区(cl_mem)明显快于图像({{1 }})。

所以我想将我的图片处理为cl_image,但不幸的是我仍然坚持使用只会吐出cl_mem的API。我正在使用为我创建图像的OS X API cl_images

有没有办法获取clCreateImageFromIOSurface2DAPPLE并将其视为cl_image?当我尝试这样做时,我在运行内核时遇到错误。

我尝试使用cl_mem将图像复制到缓冲区,但这也太慢了。有任何想法吗?提前致谢

PS:我相信我的内核在缓冲区上运行要快得多,因为我可以一次clEnqueueCopyImageToBuffer并加载4个像素,而vload4只能加载一个像素。

1 个答案:

答案 0 :(得分:1)

无法将OpenCL图像视为内存。图像的内存布局对于实现是私有的,应该被认为是未知的。

但是,如果您的代码创建了图像,则可以创建缓冲区然后使用cl_khr_image2d_from_buffer。否则编写一个内核,将数据从映像复制到缓冲区,看看它是否比clEnqueueCopyImageToBuffer更快(不太可能)。