zoukankan      html  css  js  c++  java
  • 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:

    方式 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则会获得比较差的效果。

  • 相关阅读:
    configuration details
    Java教程 Java API 模拟器学习
    如何用CSC.exe来编译Visual C#的代码文件
    finally 里不能有return语句
    J2ME(cldc/midp)简介
    eclipse+mysql+tomcat配置JNDI
    JDK+Tomcat+Servlet连接Mysql数据库
    访问 IIS 元数据库失败
    硬盘安装Ubuntu
    tomcat与IIS服务器集成
  • 原文地址:https://www.cnblogs.com/willhua/p/10123398.html
Copyright © 2011-2022 走看看