title: 什么是流式汇编器? abbreviation: SASS
流式汇编器
(SASS) 是运行在 NVIDIA GPU 上的程序的汇编格式。这是可编写人类可读代码的最低层级格式。它是 nvcc(NVIDIA CUDA 编译器驱动程序)输出的格式之一,与 PTX 并列。它在执行期间被转换为特定设备的二进制微码。推测"流式汇编器"中的"流式"指的是该汇编语言程序所面向的流式多处理器 (SM)。
SASS 是版本化的,并且与特定的 NVIDIA GPU SM 架构绑定。另请参阅计算能力。
以下是适用于 Hopper GPU 的 SM90a 架构的 SASS 示例指令:
FFMA R0, R7, R0, 1.5 ;- 执行FusedFloating pointMultiplyAdd(融合浮点乘加),将Register 7 和Register 0 的内容相乘,加上1.5,并将结果存储在Register 0 中。S2UR UR4, SR_CTAID.X ;- 将协作线程阵列 (CTA) 索引的X值从其SpecialRegister(特殊寄存器)复制到UniformRegister 4(统一寄存器)。
与 CPU 相比,手动编写这种"GPU 汇编器"更为罕见。在性能分析和编辑高级 CUDA C/C++ 代码或内联 PTX 时查看编译器生成的 SASS 更为常见,尤其是在生产最高性能的内核时。Godbolt 支持同时查看 CUDA C/C++、SASS 和 PTX。有关 SASS 的更多细节(重点关注性能调试工作流),请参阅 Arun Demeure 的这个演讲。
SASS 的文档记录非常少——指令列在 NVIDIA CUDA 二进制工具文档 中,但未定义其语义。从 ASCII 汇编器到二进制操作码和操作数的映射完全没有文档记录,但在某些情况下已被逆向工程(Maxwell、Lovelace)。