第一种:使用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. TensorFlow从1到2(六)结构化数据预处理和心脏病预测

    结构化数据的预处理 前面所展示的一些示例已经很让人兴奋.但从总体看,数据类型还是比较单一的,比如图片,比如文本. 这个单一并非指数据的类型单一,而是指数据组成的每一部分,在模型中对于结果预测的影响基本 ...

  2. java游戏开发杂谈 - 画布和画笔

    在Eclipse里,编写如下两个类: package game2; import java.awt.Color; import java.awt.Graphics; import javax.swin ...

  3. ab性能测试工具的使用

    一.什么是ab ab,即Apache Benchmark,是一种用于测试Apache超文本传输协议(HTTP)服务器的工具. ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访 ...

  4. 解决Configuration 'compile' is obsolete and has been replaced with implementation

    项目中Gradle版本升级到4.4后,项目构建时,每次出现红色的警告信息: WARNING: Configuration 'compile' is obsolete and has been repl ...

  5. Api管家系列(二):编辑和继承Class

    上篇写了个大概,今天我详细说一下参数的编辑,废话不多说 先打开一个项目,我要特别说一下设置里的“默认参数设置” 打开默认参数设置,这里我用红色圈出的tab可以设置请求头,返回头和返回状态,这些设置会在 ...

  6. redis 安装-配置

    下载链接: wget http://download.redis.io/releases/redis-4.0.9.tar.gz ※ 如果没有  直接复制url 到浏览器下载 1:下载完成 2:解压 t ...

  7. 通过命令行设置Windows 时区

    我们在进行自动测试的时候,不同的测试程序对于时区的要求不同,所以在开始的时候需要根据测试程序的要求了设置时区. Windows 提供了一个工具来进行时区设置.tzutil.exe. 目录:C:\Win ...

  8. How to fix corrupt HDFS FIles

    1 问题描述 HDFS在机器断电或意外崩溃的情况下,有可能出现正在写的数据(例如保存在DataNode内存的数据等)丢失的问题.再次重启HDFS后,发现hdfs无法启动,查看日志后发现,一直处于安全模 ...

  9. 迷茫<第四篇:这两年>

    时间匆匆而过,不知不觉已经是到北京的第二个年头,又到年末,2017年接近了尾声,提前预祝各位看官元旦节快乐! 今年3月份跳槽了一次,4月份以高级开发工程师职位进来现在的公司一直工作到现在,没有以前那么 ...

  10. ==运算符和equals()方法的区别

    Java语言程序中判断两个变量是否相等有两种方式:一是运用==运算符,二是运用equals方法. 1. ==运算符 对于==运算符来说,如果两个变量是基本类型的,并且是数值类型,则只要它们的值相等,就 ...