CUDA学习笔记(四)——CUDA性能
转自:http://blog.sina.com.cn/s/blog_48b9e1f90100fm5h.html
四、CUDA性能
CUDA中的block被划分成一个个的warp,在GeForce8800GTX上,一个warp有32个线程。若不够32个线程,则padding相应数目的线程。Warp中的线程ID是连续且递增的。对于二维组织的线程来说,先把threadIdx.y为0的线程按照threadIdx.x从小到大排,然后把threadIdx.y为1的线程按照threadIdx.x从小到大的顺序排列成warp。对于三维组织的线程来说,先排列threadIdx.z为0的二维线程,再排列threadIdx.z为1的二维线程,以此类推。
任何时刻,硬件都只能一次选择执行一个warp。
下面2个图是执行元素总和的操作,不同的算法实现,其效率不同。第二种方法使得线程没有分支。
全局内存性能
Memory coalescing技术能够大大提高全局内存访问的速度。硬件会检测线程所访问的位置是否是在全局内存中的相邻位置,如果是相邻位置,硬件会把这些访问合并成一个相邻访问。
SM资源的动态划分
1. thread限制:一个SM最多768个
2. block限制:一个block最多512个thread,如果block有256个thread,根据线程数目的限制,一个SM最多只能有3个block了。
3. register限制:一个SM最多8192个register
资源之间的分配和权衡对性能影响非常大。
例如,假设在矩阵乘中,block事16*16线程的,每个thread使用10个register,那么一个block需要使用2560个register,那么3个block就要用8120个register,小于8192的寄存器数目限制。但是如果再加一个block的话,寄存器数目就到达10240了,超过了寄存器数目的限制。假设每个thread使用11个register,那么一个block需要使用16*16*11=2816个寄存器,3个block需要8448个寄存器,超过了寄存器限制。所以一个SM只能容纳2个block了。那么SM上的线程数目就从768减少为512了。线程并行度减少了1/3!
另一个例子:假设在全局内存load和使用之间有四条独立的指令,在G80中,每条指令要4cyle,所以4条指令需要16个cycle。而200内存延迟需要调度200/16=14个warps来保证执行单元的利用率。若把指令数从4增加到8,那么就只需要200/(4*8)=7个warps。也就是说,即使我们把block数目从3减少到2,因此warps数目从24(768/32)减少到16(512/32),我们有足够的warps来完全地利用执行单元,性能最后还提高了!参考[RyooCGO08]
数据预取
Prefetch techniques are often combined with tiling to simultaneously address the problems of limited bandwidth and long latency
循环展开
减少分支指令和循环计数器的更新。
线程粒度
线程粒度通常是程序调优中一个重要的标准。
2009-11-9
做了一些实验,问题:
如果不设置足够多的thread,处理器是怎样处理的,实验结果是否会出错?
若thread数目不足以计算矩阵乘,那么剩下的就不会计算
编程:
gridDim.x, gridDim.y, gridDim.z表示Grid的三个维度
blockDim.x, blockDim.y, blockDim.z表示block的三个维度
对于GeForce8800来说,由于一个block的shared memory大小为 16K字节,所以对于float型(8个字节)的矩阵乘来说,tile 块最大不能超过2048
CUDA学习笔记(四)——CUDA性能的更多相关文章
- CUDA学习笔记-1: CUDA编程概览
1.GPU编程模型及基本步骤 cuda程序的基本步骤如下: 在cpu中初始化数据 将输入transfer到GPU中 利用分配好的grid和block启动kernel函数 将计算结果transfer到C ...
- kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- openresty 学习笔记四:连接mysql和进行相关操作
openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记四:回忆ES5 中的类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<四> default、rest、Multi-line Strings
default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...
- muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制
目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...
随机推荐
- HTTPS 协议降级攻击原理
0x00 HTTPS 在传统流行的web服务中,由于http协议没有对数据包进行加密,导致http协议下的网络包是明文传输,所以只要攻击者拦截到http协议下的数据包,就能直接窥探这些网络包的数据. ...
- FireFox & Chrome 使用技巧
一 FireFox 1 安装调试工具 Firebug , HttpRequester 2 打开响应式布局 打开菜单 -> 开发者 -> 响应式设计视图 二 Chrome 1 修改Chrom ...
- ASP.NET MVC 3 loginUrl自动变成Account/Login,并且发生404错误的解决方法
http://www.cnblogs.com/think8848/archive/2011/07/08/2100814.html ASP.NET MVC 3 loginUrl自动变成Account/L ...
- Android:Touch和Click的区别
http://blog.csdn.net/hufeng882412/article/details/7310142 针对屏幕上的一个View控件,Android如何区分应当触发onTouchEvent ...
- tp 多语言支持
tp支持多语言 通过get来改变语言的 http://localhost/tp/index.php/Admin/User/add/hl/zh-cn http://localhost/tp/index. ...
- php 非缓冲查询
最近在开发一个PHP程序时遇到了下面的错误: PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted 错误信息显示允许的 ...
- CentOS 6.6编译安装Nginx1.6.2+MySQL5.6.21+PHP5.6.3(转)
vi /etc/sysconfig/iptables #编辑防火墙配置文件 # Firewall configuration written by system-config-firewall # M ...
- ios框架中UIResponder的职责链设计模式应用
今天有空,就把UIResponder的职责链图上传一下 如果不理解职责链设计模式的朋友,请参考:http://www.cnblogs.com/langtianya/p/4060941.html
- [MySql]explain用法及实践
写在前面 explain对我们优化sql语句是非常有帮助的.可以通过explain+sql语句的方式分析当前sql语句. 例子 EXPLAIN table 显示这一行数据属于哪张表,若在查询中为sel ...
- .NET深入实战系列--EF到底怎么写过滤条件(转)
原文来自:http://www.cnblogs.com/yubaolee/p/DynamicLinq.html 对于系统开发来说,按不同字段进行过滤查询是一种常见的需求.在EF中通常的做法是: /// ...