60 cuda全局性能优化
0 引言
cuda线程模型涉及grid的块划分和线程配置,直接影响到全局运算速度。根据文档《CUDA_C_Programming_Guide》,性能优化有三个方面的基本策略。
(1)最大化并行执行以实现最大的利用率.
(2)优化内存使用,以实现最大的内存吞吐量.
(3)优化指令使用,以实现最大的指令吞吐量.
对于应用程序的特定部分,哪些策略将产生最佳性能收益取决于该部分的性能受哪方面的限制;例如,优化主要受内存访问限制的内核的指令使用不会产生任何显著的性能提升。因此,应该不断地通过测量和监视性能限制器(例如使用CUDA profiler)来指导优化工作。此外,将特定内核的浮点操作吞吐量或内存吞吐量(无论哪个更有意义)与设备的相应峰值理论吞吐量进行比较,可以看出内核有多大的改进空间。
1 定位问题
(1)发现采用两组数据进行训练时,速度存在比较大的差异。其中,数据1耗时 time1 = 68163 ms, 数据2耗时 time2 = 42930 ms. time1 = 1.59 * time2
通过cuda函数 gettimeofday 发现数据2关键函数的时间分布如下。
time of pre-ComputeTDF is 106063 mms
time of ComputeTDF is 96 mms
time of post-ComputeTDF is 157454 mms
time of pre-ComputeTDF is 11495 mms
time of ComputeTDF is 108 mms
time of post-ComputeTDF is 149239 mms
time of pre-ComputeTDF is 8958 mms
time of ComputeTDF is 95 mms
time of post-ComputeTDF is 133390 mms
其中, pre-ComputeTDF包含数据的预处理和内存分配与拷贝操作,ComputeTDF调用核函数计算TDF值,post-ComputeTDF计算local-TDF以及将gpu中的数据拷贝回cpu. 从时间上来看,CUDA部分的操作并非计算性能不佳的瓶颈,其瓶颈集中在pre-post-ComputeTDF上。
(2)分别考察pre-post-ComputeTDF中进行数据预处理和内存分配与拷贝的时间,结果如下。
数据2数据处理部分的耗时记录:
time of pre-ComputeTDF without memory copy is 1542 mms
time of post-ComputeTDF without memory copy is 1003 mms
time of pre-ComputeTDF without memory copy is 2182 mms
time of post-ComputeTDF without memory copy is 924 mms
time of pre-ComputeTDF without memory copy is 2066 mms
time of post-ComputeTDF without memory copy is 928 mms
sum_time_of_data_dealing = 8645mms
数据2内存分配与拷贝部分的耗时记录(例二):
time of memory copy of pre-ComputeTDF is 93738 mms
time of memory copy of post-ComputeTDF is 155900 mms
time of memory copy of pre-ComputeTDF is 6428 mms
time of memory copy of post-ComputeTDF is 140536 mms
time of memory copy of pre-ComputeTDF is 7184 mms
time of memory copy of post-ComputeTDF is 135659 mms
sum_time_of_memory_copy_2 = 539445mms = 62.4 * sum_time_of_data_dealing
可以确定时间主要消耗在了内存分配与拷贝部分上!时间差距应当出现在这一部分,计算数据1进行验证
time of memory copy of pre-ComputeTDF is 100188 mms
time of memory copy of post-ComputeTDF is 244773 mms
time of memory copy of pre-ComputeTDF is 6431 mms
time of memory copy of post-ComputeTDF is 205273 mms
time of memory copy of pre-ComputeTDF is 6668 mms
time of memory copy of post-ComputeTDF is 203422 mms
sum_time_of_memory_copy_1 = 766755mms = 1.42 * sum_time_of_memory_copy_2,与1.59的差距大致相当。
(3)更进一步,分析time of memory copy of pre-ComputeTDF 与 time of memory copy of post-ComputeTDF的区别
sum_data1_pre = 1813.6950 ms
sum_data2_pre = 1863.4580 ms
sum_data1_post = 38564.5090 ms
sum_data2_post = 49542.4860 ms
difference_sum_data_post = 10978 ms
(4)寻找其他方面的差距
统计了 time_use_without_computing_tdf1 = 11245.0 ms, time_use_without_computing_tdf2 = 1727.0 ms
difference_time_use_without_computing_tdf = 9518 ms

以上两部分 difference_sum_data_post + difference_time_use_without_computing_tdf = 20496 ms为两组数据在性能上的主要差异,分析原因在于点云规模不同,数据1点云的平均规模在7万级别,数据2点云的规模在1万级别,因此二者的表现差异比较大。
2 解决问题
通过降采样点云可以提高运算效率。
60 cuda全局性能优化的更多相关文章
- nginx全局配置和性能优化
nginx目录结构和命令 1.ls /apps/nginx/: html是测试页,sbin是主程序 2.ls /apps/nginx/sbin/: nginx 只有一个程序文件 3. ...
- CUDA性能优化----warp深度解析
本文转自:http://blog.163.com/wujiaxing009@126/blog/static/71988399201701224540201/ 1.引言 CUDA性能优化----sp, ...
- C#中那些[举手之劳]的性能优化
隔了很久没写东西了,主要是最近比较忙,更主要的是最近比较懒...... 其实这篇很早就想写了 工作和生活中经常可以看到一些程序猿,写代码的时候只关注代码的逻辑性,而不考虑运行效率 其实这对大多数程序猿 ...
- CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- Android应用性能优化(转)
人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然连贯(帧率为24fps),用手机当然也需要感知屏幕操作的连贯性(尤其是动画过度),所以Android索性就把达到这 ...
- MySQL 基础及性能优化工具
数据库,用户及权限 常用用户管理操作 # 创建本地用户 abc create user abc@localhost # 创建内网能够访问的用户 abc create user abc@'192.168 ...
- CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- 转载:SqlServer数据库性能优化详解
本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...
- 【转载】Spark性能优化指南——高级篇
前言 数据倾斜调优 调优概述 数据倾斜发生时的现象 数据倾斜发生的原理 如何定位导致数据倾斜的代码 查看导致数据倾斜的key的数据分布情况 数据倾斜的解决方案 解决方案一:使用Hive ETL预处理数 ...
随机推荐
- 基于React Native的跨三端应用架构实践
作者|陈子涵 编辑|覃云 “一次编写, 到处运行”(Write once, run anywhere ) 是很多前端团队孜孜以求的目标.实现这个目标,不但能以最快的速度,将应用推广到各个渠道,而且还能 ...
- 62. File类常用方法
为了怕混淆,先说明一些下面要出现的名词意思:例如:D:\\新建文件夹 (2)\\a.txt 和 D:\\新建文件夹 (2)\\aaaa D:\\新建文件夹 (2) 父路径 a.txt ...
- Jmeter实现百分比业务比例
Jmeter实现百分比业务比例 相较于LoadRunner,jmeter在复杂场景方式貌似略有欠缺.前一段时间,想实现一个功能,如有两个采样器a与b,a采样器与b采样器被执行的概率分别为1/4与3 ...
- tomcat 安装时出现 Failed to install Tomcat7 service
今天在安装tomcat时提示 Failed to install Tomcat7 service了,花了大半天的时间找到了原因,下面分享给大家,希望对各位有所帮助. 应该是你卸载时直接删除目录导致的. ...
- 【LeetCode 25】K 个一组翻转链表
题目链接 [题解] 模拟就好. 就k个k个节点地翻转. 每个节点都把next域指向它前面那个节点 修改完之后把这个节点前面的那个节点的next域改成这一段的最后一个节点. 然后把这一段最左边的那个节点 ...
- 如何使用android-support-V7包中ActionBar(Eclipse版)
$*********************************************************************************************$ 博主推荐 ...
- python:列表、元组和字典
1.1.特点: 任意对象的有序集合 通过偏移量读取 可变长度,异构以及任意嵌套 属于可变序列的分类 对象引用数组:当把一个对象赋给一个数据结构元素或变量名时,python总会存储对 ...
- appium 定位弹出框时报错
今天在做APP自动化时,发现定位弹出框无法定位,无奈,百度去找.发现了一篇不错的博客,故转载过来,供大家参考.后续会验证这个方法的可行性. 本博客转自:http://blog.csdn.net/qq7 ...
- springBoot使用PageHelper当超过最大页数后仍然返回数据
在SpringBoot中使用PageHelper分页插件时,如果设置pagehelper.reasonable=true时,pageNum<=0 时会查询第一页, pageNum>page ...
- 【三】Jmeter接口自动化测试系列之Http接口自动化实战
作者:大虫 本文介绍 Jmeter 工具的 http 接口 自动化测试 实战! 为了通用性,就拿知乎 网站作为实战例子吧! 必备技能:http接口基础知识.抓包,本文不做详细介绍,不会的可以先百度恶补 ...