我一直致力于加速用OpenCL编写的一些图像处理代码,而且我发现对于我的内核,缓冲区(cl_mem
)明显快于图像({{1 }})。
所以我想将我的图片处理为cl_image
,但不幸的是我仍然坚持使用只会吐出cl_mem
的API。我正在使用为我创建图像的OS X API cl_images
。
有没有办法获取clCreateImageFromIOSurface2DAPPLE
并将其视为cl_image
?当我尝试这样做时,我在运行内核时遇到错误。
我尝试使用cl_mem
将图像复制到缓冲区,但这也太慢了。有任何想法吗?提前致谢
PS:我相信我的内核在缓冲区上运行要快得多,因为我可以一次clEnqueueCopyImageToBuffer
并加载4个像素,而vload4
只能加载一个像素。
答案 0 :(得分:1)
您无法将OpenCL图像视为内存。图像的内存布局对于实现是私有的,应该被认为是未知的。
但是,如果您的代码创建了图像,则可以创建缓冲区然后使用cl_khr_image2d_from_buffer。否则编写一个内核,将数据从映像复制到缓冲区,看看它是否比clEnqueueCopyImageToBuffer更快(不太可能)。