IT狗

OpenCL中三种内存创建image的效率对比

第一种:使用ION:

cl_mem_ion_host_ptr ion_host_ptr1;ion_host_ptr1.ext_host_ptr.allocation_type = CL_MEM_ION_HOST_PTR_QCOM;ion_host_ptr1.ext_host_ptr.host_cache_policy = CL_MEM_HOST_UNCACHED_QCOM;   ion_host_ptr1.ion_filedesc = fd_data.fd;ion_host_ptr1.ion_hostptr = host_addr;clock_gettime(CLOCK_REALTIME, &ts);cl_mem input_image = clCreateImage(context,        CL_MEM_WRITE_ONLY | CL_MEM_USE_HOST_PTR | CL_MEM_EXT_HOST_PTR_QCOM,                                    &imageFormat, &imageDesc,                                   &ion_host_ptr1,                                       &err);

第二种,使用OpenCL API:

cl_mem normalImage = clCreateImage(context, CL_MEM_WRITE_ONLY | CL_MEM_ALLOC_HOST_PTR, &imageFormat, &imageDesc, NULL, &err);

第三种,使用CL_MEM_USE_HOST_PTR

cl_mem normalImage = clCreateImage(context, CL_MEM_WRITE_ONLY | CL_MEM_USE_HOST_PTR , &imageFormat, &imageDesc, data, &err);

然后用这三个cl_mem去执行相同的kernel(用255减去像素值,图像大小为1440x1080),然后把结果clEnqueueMapImage到host指针,然后再使用memcpy复制到另外一块host内存,测量时间如下,单位为ms:

方式clCreateImageclEnqueueNDRangeKernelclEnqueueMapImage
ION0.051.50.035
OpenCL API0.81.50.5
CL_MEM_USE_HOST_PTR1.72.41.0

同时,clEnqueueUnmapMemObject和memcpy都很快,耗时分别为0.015ms和0.0004ms左右。
从测量结果来看,使用ION的方式,在各项速度上都是占优的。使用OpenCL API也比较接近。而使用CL_MEM_USE_HOST_PTR则会获得比较差的效果。

此文由 IT狗 编辑,本网站所发布展示的作品/文章版权归原作者所有,任何商业用途均须联系作者!

相关推荐

评论 暂无评论