GPU硬件架构
如图所示
总体来讲,数据从CPU内存传输到GPU内存是这样的过程:
CPU内存(DDRx)—>CPU L3缓存 —>CPU I/O控制器 —>PCIe总线 —>GPU I/O控制器 —> L2缓存 —> GPU内存(GDDRx)
1.PCIe总线
CPU与GPU进行数据传输时(比如使用函数cudaMemcpy),两者的数据通过PCIe总线进行传输。
PCIe总线的数据吞吐量很大程度上影响了GPU的运算速度。目前最高版本为PCIe 4.0,版本越高吞吐速度越快。
2.主机端接口
主要用于与PCIe总线进行数据和代码的交换。
3.千兆线程调度器
顾名思义,其主要用于线程资源的调度,不过它只会分配给SM block资源(block ID)而不会关心thread ID。
4.末级高速缓存
CPU端L3缓存与GPU端L2缓存被称作末级高速缓存(LLC),它们直接与PCIe总线相连,其传输速度很高。
5.流处理器SM
一个SM内有两个block
SM中可以同时运行多条指令流水线,SM中不同warp在流水线中交替运行,以达到隐藏延时的作用。
每个SM有属于自己的L1$缓存,可以并行地为计算核心提供数据,这个数据在SM内部是通用的,在其他SM不可用。
SM内部还有执行单元和控制单元,前者用于计算,后者用于控制。
6.内存控制器
负责将全局存储器的数据送到L2$缓存中。
7.warp
1 SM = 2 block = 64 warp = 2048 thread
warp是GPU执行的基本单位,block是GPU启动的基本单位。
一个warp里面的32个线程只能执行同样的指令。