使用Image对象时,它比使用缓冲区对象更慢

时间:2014-12-09 17:52:11

标签: c++ opencl

我正在尝试使用Image对象进行图像处理。

我将图像对象处理时间与缓冲对象处理时间进行了比较。

我发现YUV420中的图像对象比缓冲对象慢。

由于数据大小,我分别处理了Y和UV。

Y是原始尺寸,UV是原始图像尺寸的四分之一。

所以,我使用cl_image_format

  • Y:image_channel_order = CL_R,image_channel_data_type = CL_UNSIGNED_INT8
  • UV:image_channel_order = CL_RG,image_channel_data_type = CL_UNSIGNED_INT8

我认为图像对象在处理图像时是更快的缓冲对象。

但是,这真是一个意想不到的结果。

我不知道原因。

我认为图像对象比24位的缓冲对象占用更多的位大小。

但是,我不能确定。

1 个答案:

答案 0 :(得分:0)

这一切都取决于您的访问模式。对于合并读取,缓冲区最快,但对于非合并读取,它比使用图像慢。您可以使用共享本地内存作为缓存来解决这个问题。

图像使用针对空间局部性优化的纹理缓存。因此对于附近的读取 - 水平或垂直 - 它可能比缓冲区更快。

您没有显示任何代码,但如果您看到缓冲区的速度更快,那么您必须具有合并读取。如果您更改了访问模式,那么可能是相反的方式。