经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
OpenCL中三种内存创建image的效率对比
来源:cnblogs  作者:willhua  时间:2018/12/17 9:38:45  对本文有异议

第一种:使用ION:

  1. cl_mem_ion_host_ptr ion_host_ptr1;
  2. ion_host_ptr1.ext_host_ptr.allocation_type = CL_MEM_ION_HOST_PTR_QCOM;
  3. ion_host_ptr1.ext_host_ptr.host_cache_policy = CL_MEM_HOST_UNCACHED_QCOM;
  4. ion_host_ptr1.ion_filedesc = fd_data.fd;
  5. ion_host_ptr1.ion_hostptr = host_addr;
  6. clock_gettime(CLOCK_REALTIME, &ts);
  7. cl_mem input_image = clCreateImage(context,
  8. CL_MEM_WRITE_ONLY | CL_MEM_USE_HOST_PTR | CL_MEM_EXT_HOST_PTR_QCOM,
  9. &imageFormat, &imageDesc,
  10. &ion_host_ptr1,
  11. &err);

第二种,使用OpenCL API:

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

第三种,使用CL_MEM_USE_HOST_PTR

  1. 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:

方式 clCreateImage clEnqueueNDRangeKernel clEnqueueMapImage
ION 0.05 1.5 0.035
OpenCL API 0.8 1.5 0.5
CL_MEM_USE_HOST_PTR 1.7 2.4 1.0

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号