最近在做一个图像处理的算法,跑在高通平台上,需要使用OpenCL加速。代码分为三个部分:
1. 初始化
2. 处理图像
3. 释放资源

为了尽可能地减少算法的运行时间,我将一切可以预处理的内容都放到了初始化中,其中就包括了创建buffer。在初始化中,我调用clCreateBuffer()创建了9个buffer,共计约占用600MB内存。然后在处理图像中重复使用这些buffer,最后在释放资源中释放所有buffer。

但是在实际测试后发现,每调用一次clCreateBuffer(),都会花费大约70ms的时间,这样一来,创建所有buffer就花费了约600ms的时间。同样地,在释放这些buffer时,每个也会花费几十毫秒的时间。如此,初始化释放资源的时间就令人比较难以接受。

经同事提醒,我想到了高通文档《Qualcomm® Snapdragon™ Mobile Platform OpenCL General Programming and Optimization》中提到的ION内存。文档中说,使用ION可以避免内存拷贝。那么对缩短创建buffer的时间会不会也有帮助呢?毕竟在我的印象中,使用new创建一段几百MB的内存也才花费几毫秒的时间。

使用ION内存来创建OpenCL buffer需要cl_qcom_ion_host_ptr扩展(在上述文档中有提到),其说明及示例代码在OpenCL官网可以查到,为了方便,我直接贴到这里:cl_qcom_ion_host_ptr。

然后我在高通平台上进行了测试。测试结果让人半忧半喜。令人忧的是,使用ION内存来创建OpenCL buffer时,clCreateBuffer()只需要零点几毫秒的时间,但是创建ION内存却需要使用数十毫秒的时间,等于创建buffer的时间转移到了创建ION内存上,最终花费的时间差别不大。令人喜的是,上述现象只发生在第一次调用初始化时。后面再次运行算法,再次调用初始化,创建buffer和创建ION内存的时间便会都变为零点几毫秒。另外,无论是第几次调用释放资源,速度都很快,总共只需要数毫秒。

所以问题并未彻底解决。

由于我对这个现象背后的原理知之不详,所以也只能做到这一步了。如果了解原理的话,是否可以真正地缩短创建OpenCL buffer的时间呢?

另外我还观察到一个现象。在不使用ION内存时,我使用高通的性能分析工具Snapdragon Profiler观察到,运行算法时系统内存会上升约700MB。但是使用ION内存时,系统内存只会上升200多MB。这可能也跟ION的原理有关吧。

如果有哪位朋友知道上述两个现象的原因,可以发邮件告诉我。多谢!

注:最后还是决定使用ION内存,因为看到高通的Camera相关代码中就使用了ION内存。并且使用ION内存后,算法实际运行时间未发生发化。

OpenCL clCreateBuffer占用太多时间相关推荐

  1. BIMer们请注意:在建模时千万别让问题分析占用太多时间

    "太冤枉了,一天当中大部分的时间都在做问题分析,真正用在建模的时间少之又少." 不知大家平时在用Revit建模时是不是也会有这样的同感:最怕遇到设计问题了,倒也不是很难处理,关键是 ...

  2. java idle耗时_chrome中性能分析工具分析页面中Idle(空闲时间)占用太长时间,会不会影响页面性能,如果会是什么原因造成的?...

    看了楼上诸多回答,真是为现在前端开发者捏了一把汗啊!题主不懂就罢了,答题的人不懂也硬往上凑,你们心可真大啊-- 吐槽完毕,正经回答一下. 这里的 idle 含义是复合性质的,不能完全等同于服务器加载的 ...

  3. 程序员,不要让微博占用你太多时间。

    不管我们是否意识到,我们无法否认一个事实,微博火了,微博和其它新兴的互联网工具一样在改变着我们的生活. 不过,我个人想对程序员们说一句话,不要让微博占用你太多时间. 为什么? 要回答这个问题,你可以停 ...

  4. 如何占用计算机内存,电脑内存占用太高怎么办 教你电脑内存不够用解决方法...

    现在很多白领买电脑,都会优先考虑电脑的续航和便捷,因为他们买电脑主要也就办办公,看看电影,又不玩大型游戏,所以高性能对他们来说也没什么必要. 笔记本电脑 但现在市面上续航久,便携性比较高的Intel电 ...

  5. 服务器内存占用太高如何解决及知识点介绍

    背景 服务器内存占用太高 查看内存 free -m 查看服务器内存使用情况,-m的意思是内存显示单位是mb top 查看服务器所有进程占用内存,为了查看方便,可以使用 shift+md可以让进程按照内 ...

  6. 怎么减少计算机内存占有,还在为电脑内存占用太高而烦恼吗?教你一招轻松解决...

    查毒了也不管用.结果是电脑的物理内存占用太高了,下面就教大家怎么减少物理内存,希望对您有所帮助! 1.启动"windows任务管理器",快捷键"alt+ctrl+dele ...

  7. linux内存不足宕机,记一次linux机器内存占用太多导致的服务宕机

    背景 最近我们测试环境部署的一个项目总是不停的宕机,之前也有过,但是最近特别频繁 猜测 可能是因为cup或者内存占用太大导致的服务宕机 执行 1.登录linux服务器 2.top命令 下面是对每一行信 ...

  8. qq空间网页版电脑_常用QQ软件,电脑C盘快满了,占用太多空间,如何快速清理?...

    常用QQ软件,电脑C盘快满了,占用太多空间,如何快速清理? 如果你的QQ软件经常使用,并且加入的群比较多! QQ群内的图片和消息会非常地多! 如果QQ软件是采用默认安装到C盘的方式, 那么C盘将很快点 ...

  9. php-cgi 68%,php cgi 进程占用太多怎么办

    php cgi进程占用太多的解决办法:1.从"php.ini"中禁止掉eAccelerater模块:2.借助Linux的proc虚拟文件系统找到具体的问题程序:3.借助Linux的 ...

最新文章

  1. 计算Android屏幕解锁组合数
  2. cocos2dx 引入 libpomelo库
  3. NYOJ练习题 how many hairstyles can they see?
  4. LeetCode每日一题 141. 环形链表
  5. 滴滴海量离线数据的在线化 — FastLoad
  6. P4196-[CQOI2006]凸多边形/[模板]半平面交【计算几何】
  7. coap python3_node-coap入门(三)——Observe
  8. python安装盒怎么打开_安装MySQL-python报错
  9. NET USE 命令用法
  10. Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结
  11. 每个程序员都应读的30本书
  12. 联想微型计算机改win76,联想ideacentre一体机改win7详细教程
  13. 【空间数据库】空间数据库引擎(Spatial DataBase Engine)ArcSDE详解
  14. ResNet50修改网络适应灰度图片并加载预训练模型
  15. CNN | 02实现几何图形分类
  16. 计算机维修的入门知识
  17. 如何计算石英晶振的匹配电容
  18. 浙大计算机复试知识点整理,浙大计算机考研经验--坚持到底,终会成功
  19. linux离线安装中文字体
  20. c++重启资源管理器代码

热门文章

  1. word xml 各个标签含义
  2. 计算机专业学电路分析,计算机专业电路系列课程教学改革调查分析
  3. 3.12 CMMI3级——深入理解三个O(OPF OPD OT)
  4. 参加 腾讯大讲堂 的一些笔记与体会
  5. 时间单位与存储单位换算
  6. 【机器学习】深入剖析主成分分析(PCA)与协方差矩阵
  7. 和数新品 UTON PAD 震撼上线,为商务而生
  8. 李开复讲述离开谷歌后的生活
  9. 鸿鹄安装-在Linux中安装
  10. 浅谈CRM核心理念和运营