CUDA基础教程(2):费米架构

时间:2021-12-01 17:04:33

1、总体架构
费米架构的计算能力为2.0和2.1。G80/G92的设备为1.0,1.1,1.2。GT200架构为1.3。3.0以上的设备是开普勒架构的设备。在费米架构设备上,每个线程块至多可以容纳1024个线程。在每个线程块的线程不是很多时(小于等于192时),一个SM可以容纳8个线程块。
每个线程块中的线程数固定设置为192-768时。可以获得GPU的百分百利用率。
执行每个线程块的事件是不确定的。每个线程块只有全部指定都被执行完成,才会被从SM中被撤走。所以,如果一个线程块中的线程过多,所有的线程块中的其他线程束都*等待最后一个线程束执行完毕。所以,GPU因为这个原因被闲置了。另外,不要假定线程块的执行顺序,因为线程块根本不会按照我们预想的进行执行。线程块会被随机的负载均衡的分配到SM上。

2、内存
一般来讲,访问寄存器只需要消耗一个时钟周期,访问共享内存至多需要32个时钟周期。访问纹理内存,常量内存,和全局内存,则需要消耗400个到600个时钟周期,而且带宽也非常有限。寄存器一般而言是有限的,对于费米架构,如果每个线程块中包含256个线程,那么每个SM最多容纳6个线程块。此时,每个线程块只能使用16个寄存器。

共享内存实际上是手用户控制的一级缓存。在费米架构的设备上,共享内存的默认大小是48kb,可以调整为16kb。共享内存和一级缓存共享一个64kb的存储区域。共享内存每个SM只有一个。

常量内存其实只是全局内存的虚拟地址形式。并没有物理上的专门的常量内存块。常量内存相当于告诉缓存,同时有广播机制。
全局内存而言,GPU和CPU都可以对其进行读写操作。实际上,任何PCI-E总线上的设备都可以对全局内存进行读写。CPU主机可以通过以下三种方式对GPU上的内存进行访问
(1)显示的阻塞传输
(2)显示的非阻塞传输
(4)隐式的使用零内存复制

纹理内存:一般在计算力为1.x的设备上才被采用.纹理内存就是当访问存储单元时,允许GPU在某些硬件方面主动实现。