第一种:使用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则会获得比较差的效果。

OpenCL中三种内存创建image的效率对比的更多相关文章

  1. C++中三种传递参数方法的效率分析

    众所周知,在C++中有三种参数传递的方式: 按值传递(pass by value) #include <iostream> using namespace std; void swap(i ...

  2. 在C#中几种常见数组复制方法的效率对比

    原文是在http://blog.csdn.net/jiangzhanchang/article/details/9998229 看到的,本文在原文基础上增加了新的方法,并对多种数据类型做了更全面的对比 ...

  3. Android中三种onClick事件的实现与对比

    方式一:在activity的onCreate()方法中,嵌入如下代码: Button button = (Button)findViewById(R.id.button1); button.setOn ...

  4. C#三种字符串拼接方法的效率对比

    C#字符串拼接的方法常用的有:StringBuilder.+.string.Format.List<string>.使用情况不同,效率不同. 1.+的方式 string sql = &qu ...

  5. Spring中三种配置Bean的方式

    Spring中三种配置Bean的方式分别是: 基于XML的配置方式 基于注解的配置方式 基于Java类的配置方式 一.基于XML的配置 这个很简单,所以如何使用就略掉. 二.基于注解的配置 Sprin ...

  6. 深入浅出spring IOC中三种依赖注入方式

    深入浅出spring IOC中三种依赖注入方式 spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和 ...

  7. 深入理解C语言-二级指针三种内存模型

    二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...

  8. 【】VMware vSphere中三种磁盘规格的解释说明

    在VMware vSphere中,不管是以前的5.1版本,或者是现在的6.5版本,创建虚拟机时,在创建磁盘时,都会让选择磁盘的置备类型,如下图所示,分为: 厚置备延迟置零 厚置备置零 Thin Pro ...

  9. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

随机推荐

  1. 【转】大白话讲解Promise(一)

    原文地址:https://www.cnblogs.com/lvdabao/p/es6-promise-1.html ES6 Promise 先拉出来遛遛 复杂的概念先不讲,我们先简单粗暴地把Promi ...

  2. 解决 Vue 动态生成 el-checkbox 点击无法赋值问题

    博客地址:https://ainyi.com/68 最近遇到一个问题,在一个页面需要动态渲染页面内的表单,其中包括 checkbox 表单类型,并且使用 Element 组件 UI 时,此时 v-mo ...

  3. MySQL 四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  4. SAP MM 预留单据的历史修改记录?

    SAP MM 预留单据的历史修改记录? 在笔者眼里,SAP系统是一个高度严谨的软件系统.用户在SAP系统里的相关操作,系统都会做记录.用户对于系统的相关单据的增删改,SAP系统都有保留change h ...

  5. 泛微关于js设计的一些小技巧

    1.关于泛微流程的js设计 泛微oa可以插入javascript可以diy自己想要的表单页面前端功能.如果有前端开发经验,或者熟练使用jQuery的话,这将变得非常容易!同时泛微OA内部有很多库,包括 ...

  6. 关于RecyclerView嵌套导致item复用异常,界面异常的问题

    常规需求: 外层RecyclerView嵌套内层RecyclerView , 在上下滑动的时候会出现item数据以及view的显示异常. 解决办法: 1.重写  getItemViewType  方法 ...

  7. python检测字符串乱码

    import chardet f=open('test.txt','rb') f_read=f.read() f_charInfo=chardet.detect(f_read) print(f_cha ...

  8. xshell6 评估期已过 解决办法

    xshell6 评估期已过,因为我下载的版本是evaluation版本,是有期限的.大家可以修改为Home and school use 的版本,这样就不会出现这个提示了.具体的操作步骤如下: 1.前 ...

  9. Mysql8 安装过程及安装过程系列问题记录

    前言: 今天,想装个高版本一点的mysql试试,于是下载了一个mysql8的zip版本. 地址:https://dev.mysql.com/downloads/file/?id=484900 没想到安 ...

  10. spring集成shiro登陆流程(上)

    上一篇已经分析了shiro的入口filter是SpringShiroFilter, 那么它的doFilter在哪儿呢? 我们看到它的直接父类AbstractShrioFilter继承了OncePerR ...