title: 什么是 CUDA 内存层次结构?

作为 CUDA 编程模型 (CUDA Programming Model) 的一部分,线程层次结构 (Thread Hierarchy) 的每个级别都可以访问该级别中所有线程 (Thread) 共享的独立内存块:即"内存层次结构"。该内存可用于协调和通信,并由程序员(而非硬件或运行时)管理。

对于线程块网格 (Thread Block Grid),其共享内存位于 GPU 显存 (GPU RAM) 中,称为全局内存 (Global Memory)。可以通过原子操作和屏障来协调对此内存的访问,但跨线程块 (Thread Block) 的执行顺序是不确定的。

对于单个线程 (Thread),其内存是流式多处理器 (Streaming Multiprocessor, SM)寄存器文件 (Register File) 的一部分。根据 CUDA 编程模型 (CUDA Programming Model) 的原始语义,此内存是线程 (Thread) 私有的,但为了在张量核心 (Tensor Core) 上实现矩阵乘法而添加到 PTX (Parallel Thread Execution)SASS (Streaming Assembler) 的某些指令会在线程 (Thread) 之间共享输入和输出。

介于两者之间的是线程层次结构中线程块 (Thread Block) 级别的共享内存 (Shared Memory),它存储在每个 SM (Streaming Multiprocessor)L1 数据缓存 (L1 Data Cache) 中。对此缓存的精心管理——例如,在加载新数据之前将数据加载到其中以支持最大数量的算术运算——是设计高性能 (High-Performance) CUDA 内核 (Kernel) 的关键所在。