Fermi 架构
Fermi架构是第一个完整的GPU架构,如图10-15所示。
图10-15 Fermi架构是第一个完整的GPU架构
Fermi架构逻辑图,如图10-15所示,具体数据如下:
1)512个加速核心,CUDA核
2)每个CUDA核心都有一个全流水线的整数算数逻辑单元ALU,和一个浮点数运算单元FPU
3)CUDA核被组织到16个SM上
4)6个384-bits的GDDR5 的内存接口
5)支持6G的全局机栽内存
6)GigaThread疫情,分配线程块到SM线程束调度器上
7)768KB的二级缓存,被所有SM共享
而SM则包括下面这些资源:
1)执行单元(CUDA核)
2)调度线程束的调度器和调度单元
3)共享内存,寄存器文件和一级缓存
每个多处理器SM有16个加载/存储单元,所以每个时钟周期内有16个线程(半个线程束)计算源地址和目的地址。
特殊功能单元SFU执行固有指令,如正弦,余弦,平方根和插值,SFU在每个时钟周期内的每个线程上执行一个固有指令。
每个SM有两个线程束调度器,和两个指令调度单元,当一个线程块被指定给一个SM时,线程块内的所有线程被分成线程束,两个线程束选择其中两个线程束,在用指令调度器存储两个线程束要执行的指令(就像上面例子中分水果的水果一样,这里有两个班,两个班的老师各自控制的自己的水果,老师就是指令调度器)
像第一张图上的显示一样,每16个CUDA核心为一个组,还有16个加载/存储单元或4个特殊功能单元。当某个线程块被分配到一个SM上的时候,会被分成多个线程束,线程束在SM上交替执行,如图10-16所示。
每个SM有两个线程束调度器,和两个指令调度单元,当一个线程块被指定给一个SM时,线程块内的所有线程被分成线程束,两个线程束选择其中两个线程束,在用指令调度器存储两个线程束要执行的指令(就像上面例子中分水果的水果一样,这里有两个班,两个班的老师各自控制的自己的水果,老师就是指令调度器)
像第一张图上的显示一样,每16个CUDA核心为一个组,还有16个加载/存储单元或4个特殊功能单元。当某个线程块被分配到一个SM上的时候,会被分成多个线程束,线程束在SM上交替执行,如图10-16所示。
图10-16 warp指令与调度交替执行架构
每个线程束在同一时间执行同一指令,同一个块内的线程束互相切换是没有时间消耗的。
Fermi上支持同时并发执行内核。并发执行内核允许执行一些小的内核程序来充分利用GPU,如图10-17所示。
Fermi上支持同时并发执行内核。并发执行内核允许执行一些小的内核程序来充分利用GPU,如图10-17所示。
图10-17 Fermi上支持同时并发执行内核架构
10.5.9 Kepler架构
Kepler架构作为Fermi架构的后代,有以下技术突破:
1)强化的SM
2)动态并行
3)Hyper-Q技术
技术参数也提高了不少,比如单个SM上CUDA核的数量,SFU的数量,LD/ST的数量等,如图10-18以及如图10-19所示。
图10-18 Kepler架构作为Fermi架构的后代,内存性能提升
图10-19 Kepler架构作为Fermi架构的后代,数据交互性能提升
kepler架构的最突出的一个特点就是内核可以启动内核了,这使得可以使用GPU完成简单的递归操作,流程如图10-20所示。
图10-20 kepler内核启动内核,使用GPU完成简单的递归操作
Hyper-Q技术主要是CPU和GPU之间的同步硬件连接,以确保CPU在GPU执行的同事做更多的工作。Fermi架构下CPU控制GPU只有一个队列,Kepler架构下可以通过Hyper-Q技术实现多个队列,如图10-21所示。
计算能力概览:
图10-21 Kepler架构下可以通过Hyper-Q技术实现多个队列