2.13. 什么是寄存器文件?
流式多处理器 (Streaming Multiprocessor) 的寄存器文件是在计算核心 (core) 进行数据操作期间的主要数据存储单元。
H100 流式多处理器(SM)的内部架构图。蓝色部分描绘的是寄存器文件。修改自 NVIDIA 的 H100 白皮书。
与 CPU 中的寄存器类似这些寄存器采用速度极快的内存技术制成,能够与计算 核心 (core)的处理速度保持同步,比 L1 数据缓存 (L1 data cache) 快大约一个数量级。
寄存器文件被划分为 32 位寄存器,可在不同数据类型(如 32 位整数、64 位浮点数以及 16 位或更小的浮点数组)之间动态重新分配。这些物理寄存器是 并行线程执行 (Parallel Thread eXecution, PTX) 中 虚拟寄存器 (virtual registers) 中间表示层的底层实现。
在 流式汇编器 (Streaming Assembler, SASS) 中,物理寄存器分配给 线程 (thread) 的工作由像 ptxas 这样的编译器管理,该编译器按 线程块 (thread block) 优化寄存器文件的使用。如果每个 线程块 (thread block) 消耗过多的寄存器文件(俗称高 “寄存器压力 (register pressure)”),那么可并发调度的 线程 (thread) 数量将会减少,导致低 占用率 (occupancy),并可能通过减少 延迟隐藏 (latency hiding) 的机会而影响性能。