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) 的机会而影响性能。