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预处理数 ...
随机推荐
- CTSC2019
(upd:随机立方体AC) 太菜了只会部分分.以后慢慢补坑吧…… 随机立方体: 30分: 正常人都能想到的的转移状态(我的确是弱智),从大往小填数,记录有多少个极大值点和三个方向上各占了多少.转移可以 ...
- BZOJ 2326: [HNOI2011]数学作业(矩阵乘法)
传送门 解题思路 NOIp前看到的一道题,当时想了很久没想出来,NOIp后拿出来看竟然想出来了.注意到有递推\(f[i]=f[i-1]*poww[i]+i\),\(f[i]\)表示\(1-i\)连接起 ...
- HDU - 1712 (分组背包模板)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1712 题意:给你n个课程,每个课程有很多种学习方法,用的时间和取得的效果都不一样,现在你只有m天时间用来学 ...
- Ext 消息框
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- nginx,php-fpm性能优化
When you running a highload website with PHP-FPM via FastCGI, the following tips may be useful to yo ...
- (1)sqlserver2017安装
本体 https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 图形管理工具ssm 文档 https://docs.microso ...
- tomcat 相关异常
端口没有被占用却提示Several ports (8005, 8080, 8009) required by Tomcat??? 解决办法:1.运行cmd进入命令行界面:2.运行命令: netsh w ...
- PHP面试 PHP基础知识 四(流程控制)
流程控制 PHP遍历数组的三种方式及各自的区别 三种方式:使用for循环.使用foreach循环.使用while.list().each()组合循环 区别:foe循环只能遍历索引数组,foeach可以 ...
- git分布式版本控制系统权威指南学习笔记(二):git add暂存区的三个状态以及暂存区的理解
文章目录 不经过git add(到暂存区),能直接进行commit吗? 举个
- 20140814 explicit
1.explicit explicit 只对构造函数起作用,用来抑制隐式转换. 如: class A { A(int a); }; int Functi ...