NVIDIA¶
基础知识¶
PTX JIT 与 CUBIN¶
编译 CUDA 代码时,可以选择是否包含 PTX(中间代码)和/或特定架构的原生 cubin(GPU 二进制代码):
| 编译选项 | 优点 | 缺点 | 
|---|---|---|
| 仅 PTX(JIT 编译) | 兼容未来 GPU(无需重新编译) | 首次运行慢(JIT 开销),可能性能较差 | 
| PTX + 原生 cubin | 启动快(无 JIT)、性能最优、精度更高、充分利用特定架构新特性 | 二进制体积稍大,未来 GPU 需额外 PTX 支持 | 
- 仅提供 PTX 时,首次运行需 JIT 编译所有内核(包括未调用的库内核),影响启动速度
 - 提供原生 cubin 可避免 JIT 编译延迟,并确保充分利用特定架构的优化指令集
 - 推荐同时提供 PTX 和原生 cubin,兼顾兼容性、性能和启动速度
 
相关选项在 -gencode 下:
| 参数/术语 | 含义 | 
|---|---|
compute_XX | 
PTX 版本(中间代码,用于未来 GPU 兼容) | 
sm_XX | 
cubin 版本(GPU 原生二进制代码) | 
arch=compute_XX | 
前端编译目标,必须为 PTX 版本 | 
code=sm_XX 或 code=compute_XX | 
后端编译目标,决定最终生成的代码(cubin 或 PTX) | 
| PTX 的作用 | 确保未来 GPU 兼容性(即使当前硬件不支持该架构) | 
Driver¶
单机:NVLink¶
NVLink 提供 GPU 之间的连接,NVSwitch 是用于多 GPU 全互联通信的交换芯片。到 2025 年,有四代 NVSwitch:
| NVSwitch 代数 | GPU | 
|---|---|
| 一 | V100 | 
| 二 | A100 | 
| 三 | H100 | 
| 四 | B200、B100 | 
代数不同,GPU 和互联芯片的拓扑有变化。
在软件侧:
- 早于第四代的系统:由内核驱动和 Fabric Manager 组成
- 内核驱动根据 FM 的请求执行底层硬件管理
 - FM 配置 NVSwitch 内存结构,使所有参与的 GPU 形成一个统一的内存结构,并监控支持该结构的 NVLink
 - FM 也负责 GPU、NVSwitch 等的路由、端口、驱动程序初始化
 
 - 第四代系统:
- NVIDIA 实现了跨 NVLink、InfiniBand 和以太网交换机的统一架构,第四代 NVSwitch 与 InfiniBand 交换机共享通用 IP 模块,主要集中在链路层和控制面
 - 引入 NVLink Subnet Manager(NVLSM) 与 FM 协同工作,它源自 Infiniband Subnet Manager
 - NVLSM 负责配置 NVSwitch 路由表,而 FM 负责 GPU 端路由、NVLink 配置,并提供分区管理的 API,FM 与 NVLSM 之间通过 IPC 交互
 - NVSwitch 不再作为 PCIe Bridge 设备被主机识别,而是通过 CX7 Bridge 连接到主机,显示为 Infiniband Controller 设备,提供一些 PF 用于管理