熟悉CUDA开发的开发者都知道,在编译GPU程序时,sm_XX架构参数是必不可少的核心配置。过去,大家普遍认为sm版本只是对应一代GPU架构的简单标签:sm_75对应Turing、sm_80对应Ampere、sm_89对应Ada,一对一扁平映射,清晰直观。但从Hopper和Blackwell架构开始,NVIDIA彻底改变了这套规则——sm后缀不再是装饰性元数据,而是定义GPU二进制程序运行行为的核心契约。sm_90、sm_90a、sm_100f之间的区别,本质上涉及代码权限、指令集范围和设备兼容性的底层差异,直接决定了程序能在哪些硬件上运行、能调用哪些硬件特性。

一、传统SM规则:一对一的扁平架构映射
在Hopper架构推出之前,NVIDIA的SM版本体系非常直观,遵循“一个SM版本对应一代完整架构”的扁平化规则。开发者编译程序时,只需选定目标架构,PTX汇编器便会生成对应硬件的原生SASS机器码,整个流程简单且无歧义。
在这种模式下,SM版本与硬件架构呈现锁定关系:sm_75专属Turing,sm_80专属Ampere,sm_89专属Ada,不存在细分分支。编译后的二进制程序兼容性固定、指令集范围确定,几乎不会遇到同代架构多版本适配的问题,这也是早期CUDA开发门槛相对较低的重要原因。
二、Hopper架构革新:拆分出sm_90与sm_90a双版本
到了第9代Hopper架构,NVIDIA首次突破了这一对一的映射规则,将原本单一的sm_90拆分为通用基线版sm_90和架构专属版sm_90a。二者并非简单的版本微调,而是核心运行逻辑截然不同的编译目标。
1. sm_90:高兼容的Hopper通用基线
sm_90是Hopper架构的通用基线版本,主打最大向前兼容性。在该模式下,编译器仅生成通用、标准化的指令集,适配Hopper架构的基础能力。编译出的二进制程序兼容性更广,可适配Hopper全系硬件,同时保留了跨版本兼容的潜力,适合追求稳定性与通用性的通用计算场景,也是绝大多数常规CUDA程序的首选编译目标。
2. sm_90a:无兼容的硬件专属增强版
后缀“a”代表架构专属(architecture-specific),这是NVIDIA赋予开发者调用硬件特性的权限。指定sm_90a编译时,PTX汇编器可以生成仅Hopper硬件能识别和执行的专属指令,解锁架构全部高级特性,充分释放硬件极致性能。
但高性能的代价是彻底牺牲兼容性:sm_90a编译的程序不具备任何向前兼容能力,仅能运行在Hopper架构硬件上,无法适配后续新一代GPU。简单来说,sm_90保兼容、舍极致性能,sm_90a换满血性能、弃跨代兼容,两者是完全相反的编译策略。
三、Blackwell架构升级:新增sm_100f家族层级
随着第10代Blackwell架构的问世,CUDA 12.9版本进一步完善了SM版本体系——在“通用基线(无后缀)”和“架构专属(a后缀)”之间,新增了家族专属(f后缀,family)层级,形成三档分级体系。sm_100、sm_100f、sm_100a各司其职,规则更加精细。
1. sm_100:极致兼容的基础基线
作为Blackwell架构的基础版本,sm_100延续通用基线逻辑,搭载最基础的指令集,拥有最强的向前兼容性。程序适配范围最广,但仅能使用硬件基础能力,无法调用家族专属的高级特性,主打稳定适配与通用部署。
2. sm_100f:跨家族通用的特性解锁版
“f”后缀是全新的家族适配层级,也是Blackwell架构最核心的更新点。sm_100f不再局限于单一硬件,可适配10.x全系家族硬件(目前包含sm_100、sm_103等Blackwell迭代型号)。
该版本的核心价值在于解锁家族共享的高级特性,最典型的就是专属张量核运算指令,兼顾了特性解锁与设备兼容性。既不像基础版sm_100那样功能受限,也不像a后缀版本那样彻底锁定单一硬件,是批量部署、AI推理训练等场景的最优选择。
3. sm_100a:单硬件满血终极版
与sm_90a逻辑一致,sm_100a是Blackwell单架构的满血专属版本,可调用硬件全部指令集与极致特性,性能拉满。但兼容性限制最为严格,仅能运行在对应精准硬件上,无任何向前兼容能力,仅适合针对特定硬件做极致性能优化的定制化开发。
四、核心本质:从“版本标签”到“运行契约”
本次SM版本的迭代,绝非简单的后缀新增,而是NVIDIA底层技术逻辑的重大变革:彻底拆分了“程序可运行设备范围”与“程序可调用硬件特性”这两大核心能力。
此前,一个SM版本同时定义了兼容范围和特性上限;如今,无后缀、f后缀、a后缀形成了清晰的梯度:兼容性逐级递减,硬件特性与性能上限逐级递增。这也让GPU二进制程序的定义发生了根本改变,不再是笼统的“NVIDIA SASS程序”,而是精准绑定sm_90/sm_90a/sm_100f/sm_100a的专属二进制文件。
不同后缀对应的指令可用性、张量运算路径、兼容规则、校验标准、加载器行为均存在差异,对不同开发者意义截然不同:内核开发者可依据分级规则平衡程序可移植性与性能;逆向工程开发者可通过后缀精准判定程序运行逻辑;二进制分析工具则能依托这套标准化契约完成精准解析。
五、快速选型总结与开发建议
为方便开发者快速选型,核心差异与适用场景一目了然:
sm_90:Hopper通用基线,高向前兼容,适配通用场景,追求程序稳定复用
sm_90a:Hopper满血专属,无向前兼容,适配Hopper硬件极致性能优化
sm_100:Blackwell基础基线,兼容性最强,功能最简,适配通用部署
sm_100f:Blackwell家族通用,解锁张量核等共享特性,兼容10.x全系硬件,兼顾性能与适配性
sm_100a:Blackwell单硬件满血版,性能极致,无跨设备兼容,适配定制化极致优化场景
总而言之,如今的SM后缀早已不是无关紧要的编译参数,而是NVIDIA硬件与程序之间的核心运行契约。读懂这套分级规则,才能在兼容性、功能特性与硬件性能之间做出最优取舍,充分发挥新一代GPU的硬件潜力。
