CUDA参考学习资料:
- CUDA编程-基础与实践 樊哲勇
- https://github.com/brucefan1983/CUDA-Programming
- CUDA Best Practice Guide , NVIDIA Corp.
- CUDA C Programming Guide, NVIDIA Corp.
1.CPU内核组成
- Fetch/Decode:取指令、译码单元
- ALU: 逻辑运算器(Arithmetic Logic Unit)
- Execution Context: 执行上下文池
- Data cache:数据缓存
- 流水线优化单元:如乱序执行、分支断定预测、memory预存取等。
CPU瓶颈
以前,芯片的更新遵循摩尔定律:芯片的集成密度每2年翻一番,成本下降一半,但现在同样面积下芯片的数量越来越多,芯片的能量密度越来越高,散热问题越来越严重;而且芯片运算效率越高,需要读取的数据量越多,要求存储设备的读写速度越来越快,很难要求,传统的单核处理器遇到上述等物理约束, 时钟频率(perf/clock)无法保持线性增长。
2.GPU内核组成
由于上述CPU的多种瓶颈,只能向多核并行系统发展,因而产生GPU(Graphics Processing Unit)。由于GPU只执行简单任务,因此,可以将上述复杂的流水线去掉,进行精简优化 ,得到GPU的内核组成如下,这样在执行单一指令流时候可以更快。
GPU更关注计算,因此通过将多核组合在一起来增加ALU部分核数,而多核之间需要通信,因此增加了shared memory部分,CUDA核结构图如下:
上图中每个黄色小方块代表一个CUDA core,也叫Streaming Processor(SP),它在每个时钟周期执行一次乘加指令。
CPU和GPU芯片结构对比如下:
GPU将更多的空间分配给CUDA core,以空间换时间,提高并行度,加速计算。
3.GPU组成示例
下面是一个GA 100的结构图,由多个Streaming Multiprocessor (SM)组成。
每个SM的架构如下:
- 一个GPU中有128个SM,8个GPC,每个GPC有8个TPC,每个TPC有2个SM,因此,每个GPC中有16个SM。
- 每个SM中有64个FP32的CUDA core,一个GPU中有8192个FP32 CUDA core
- 每个SM中有4个3代Tensor Core,一个GPU中有512个3代Tensor Core。
- 6个HBM2(HBM 是 GDDR 存储器的替代品,可用于 GPU 和加速器,HBM2 是目前该类别中最常用的标准,支持高达 2.4Gbps 的数据速率),12个512-bit的memory 控制器