OpenCL clCreateBuffer占用太多时间
最近在做一个图像处理的算法,跑在高通平台上,需要使用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占用太多时间相关推荐
- BIMer们请注意:在建模时千万别让问题分析占用太多时间
"太冤枉了,一天当中大部分的时间都在做问题分析,真正用在建模的时间少之又少." 不知大家平时在用Revit建模时是不是也会有这样的同感:最怕遇到设计问题了,倒也不是很难处理,关键是 ...
- java idle耗时_chrome中性能分析工具分析页面中Idle(空闲时间)占用太长时间,会不会影响页面性能,如果会是什么原因造成的?...
看了楼上诸多回答,真是为现在前端开发者捏了一把汗啊!题主不懂就罢了,答题的人不懂也硬往上凑,你们心可真大啊-- 吐槽完毕,正经回答一下. 这里的 idle 含义是复合性质的,不能完全等同于服务器加载的 ...
- 程序员,不要让微博占用你太多时间。
不管我们是否意识到,我们无法否认一个事实,微博火了,微博和其它新兴的互联网工具一样在改变着我们的生活. 不过,我个人想对程序员们说一句话,不要让微博占用你太多时间. 为什么? 要回答这个问题,你可以停 ...
- 如何占用计算机内存,电脑内存占用太高怎么办 教你电脑内存不够用解决方法...
现在很多白领买电脑,都会优先考虑电脑的续航和便捷,因为他们买电脑主要也就办办公,看看电影,又不玩大型游戏,所以高性能对他们来说也没什么必要. 笔记本电脑 但现在市面上续航久,便携性比较高的Intel电 ...
- 服务器内存占用太高如何解决及知识点介绍
背景 服务器内存占用太高 查看内存 free -m 查看服务器内存使用情况,-m的意思是内存显示单位是mb top 查看服务器所有进程占用内存,为了查看方便,可以使用 shift+md可以让进程按照内 ...
- 怎么减少计算机内存占有,还在为电脑内存占用太高而烦恼吗?教你一招轻松解决...
查毒了也不管用.结果是电脑的物理内存占用太高了,下面就教大家怎么减少物理内存,希望对您有所帮助! 1.启动"windows任务管理器",快捷键"alt+ctrl+dele ...
- linux内存不足宕机,记一次linux机器内存占用太多导致的服务宕机
背景 最近我们测试环境部署的一个项目总是不停的宕机,之前也有过,但是最近特别频繁 猜测 可能是因为cup或者内存占用太大导致的服务宕机 执行 1.登录linux服务器 2.top命令 下面是对每一行信 ...
- qq空间网页版电脑_常用QQ软件,电脑C盘快满了,占用太多空间,如何快速清理?...
常用QQ软件,电脑C盘快满了,占用太多空间,如何快速清理? 如果你的QQ软件经常使用,并且加入的群比较多! QQ群内的图片和消息会非常地多! 如果QQ软件是采用默认安装到C盘的方式, 那么C盘将很快点 ...
- php-cgi 68%,php cgi 进程占用太多怎么办
php cgi进程占用太多的解决办法:1.从"php.ini"中禁止掉eAccelerater模块:2.借助Linux的proc虚拟文件系统找到具体的问题程序:3.借助Linux的 ...
最新文章
- 计算Android屏幕解锁组合数
- cocos2dx 引入 libpomelo库
- NYOJ练习题 how many hairstyles can they see?
- LeetCode每日一题 141. 环形链表
- 滴滴海量离线数据的在线化 — FastLoad
- P4196-[CQOI2006]凸多边形/[模板]半平面交【计算几何】
- coap python3_node-coap入门(三)——Observe
- python安装盒怎么打开_安装MySQL-python报错
- NET USE 命令用法
- Atitit.office word excel ppt pdf 的web在线预览方案与html转换方案 attilax 总结
- 每个程序员都应读的30本书
- 联想微型计算机改win76,联想ideacentre一体机改win7详细教程
- 【空间数据库】空间数据库引擎(Spatial DataBase Engine)ArcSDE详解
- ResNet50修改网络适应灰度图片并加载预训练模型
- CNN | 02实现几何图形分类
- 计算机维修的入门知识
- 如何计算石英晶振的匹配电容
- 浙大计算机复试知识点整理,浙大计算机考研经验--坚持到底,终会成功
- linux离线安装中文字体
- c++重启资源管理器代码