CUDA-寄存器使用

1.重要概念

存储带宽:在一定时间内从DRAM读出或写入的数据量

延迟:响应一个获取内存的请求所花费的时间,这个时间通常是上百个处理器周期

2.SM,SP,Grid,Block,thread,warp

    从硬件角度讲:SM(流多处理器),一个SM可以看作是一个多线程的CPU核,一个GPU包含多个SM,一个SM包含有多个SP(流处理器),1.x硬件,一个SM包含8个SP,2.0是32个,2.1是48个,3.0和3.5是192个。这意味着每个SM在任何时刻都能同时运行这些数目的硬件线程。

 

    从软件角度讲:Grid,Block,Thread是线程(thread)的组织形式,最小的逻辑单位是thread,若干个线程组成一个block,block被加载到SM上运行,多个block组成整体的grid。最小的硬件执行单位是warp(线程束),当前一个线程束包含32个线程。

参考
http://blog.csdn.net/zhuxianjianqi/article/details/8905678

 3.寄存器的用法

   CPU与GPU架构的一个主要区别就是CPU与GPU映射寄存器的方式。CPU通过使用寄存器重命名和栈来执行多线程;GPU利用多线程隐藏了内存获取与指令执行带来的延迟,GPU不使用寄存器重命名机制,而是致力于为没一个线程都分配真实的寄存器。因此当需要上下文切换时,所需要的操作就是将指向当前寄存器组的选择器(或指针)更新,以指向下一个执行的线程束的寄存器组,因此几乎是零开销。

   每个SM能调度若干个线程块。在SM层,线程块即若干个独立线程束的逻辑组。编译时会计算出每个内核线程所需要的寄存器数目。所有的线程块都具有相同大小,并拥有已知数目的线程,每个线程块需要的寄存器数目也就是已知和固定的。因此,GPU就能为在硬件上调度的线程块分配固定数目的寄存器。

   然而在线程层,这些细节对程序员是完全透明的。如果一个内核函数中的每个线程需要的寄存器过多,在每个SM中GPU能够调度的线程块的数量就会受到限制,因此总的可以执行的线程数量就会受到限制。开启的线程数量过少就会赵成硬件无法被充分利用,性能急剧下降,但开启过多又意味着资源可能短缺,调度到SM上的线程块数量会减少。

     根据硬件的不同,每个SM可供所有线程使用的寄存器空间大小也不同,分别有8KB,16KB,32KB以及64KB.牢记,每个线程中的每个变量会占用一个寄存器。

     总之,在编写GPU程序是,为了充分发挥硬件性能和程序速度,应考虑好寄存器数,线程数,SM调度的线程块数等的关系。同时最大化地利用寄存器。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值