1. GPU的硬件架构 以A100为例
一个GPU 又108个SM,每个SM 中有64个FP32cuda core 4个tensor core,计算卡上还有8个FP16 cudacore; 被分为4个warp,每个warp有有l0指令缓存区, 寄存器文件16384个,寄存器文件大小32bit
A100每个SM上面的占有率有如下受限因素:
- 线程块数量2个
- 每个线程块中最多运行的线程数量1024
- 所有线程块共享的寄存器个数65536
- 共享内存大小20KB
- block大小应该为warp的倍数
2. GPU的内存结构,按照速度从高到底进行排序:
GPU的内存结构可以按照速度从高到低进行排序,通常包括以下几种类型的内存:
-
寄存器(Registers):寄存器是GPU内存中速度最快的一种,用于存储每个线程的局部变量和临时数据。寄存器通常位于GPU的处理器核心内部,访问速度非常快,但数量有限。
-
共享内存(Shared Memory):共享内存是位于每个线程块内部的内存,用于线程块内的线程之间共享数据。它比全局内存访问速度更快,但仍然较快。共享内存通常用于加速线程块内的协同计算。
-
本地内存(Local Memory):本地内存是位于每个线程块内部的内存,通常用于存储局部变量和临时数据。它的访问速度介于共享内存和全局内存之间,通常比全局内存更快。
-
全局内存(Global Memory):全局内存是GPU内存中速度较低的一种,用于存储全局数据,可以被所有线程块和线程访问。全局内存通常是GPU主内存的一部分,访问速度相对较慢,但容量较大。
-
常量内存(Constant Memory):常量内存用于存储只读数据,例如常数和预计算数据。它有较快的访问速度,但不能被写入。
-
纹理内存(Texture Memory):纹理内存用于存储图像和纹理数据,通常用于图形处理和一些科学计算任务。它有特殊的高速纹理缓存,用于提高对纹理数据的访问速度。
-
全局缓存(L2 Cache):一些现代GPU具有全局缓存,用于加速对全局内存的访问。它的速度介于全局内存和更快的内存层级之间。
3.GPU的线程层次结构:
CUDA的线程组织结构是用于GPU编程的重要概念。在CUDA