Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


程序:cuda:编译流程

编译流程

流程梳理

cuda的编译流程.drawio.txt

基本流程:

  1. Device Code → PTX →(JIT or 静态编译)→ SASS(硬件汇编)→ 二进制
    1. CUDA(GPU的部分)→ PTX → 直接使用JIT运行在GPU
    2. CUDA(GPU的部分)→ PTX(不限定硬件) → SASS(限定硬件)→ 二进制 → 运行

图中出现的一些概念的简单解释:

  1. PTX
    1. PTX(Parallel Thread Execution)是NVIDIA为其GPU架构设计的一种虚拟中间表示语言,全称是Parallel Thread Execution ISA
    2. 可以理解为类似于Java的字节码,是一种面向GPU的汇编语言,但不是直接能被GPU硬件执行的机器码
    3. 它是可读的文本格式,一般作为CUDA C/C++等高级语言编译后的中间产物,供后续编译或仿真使用
    4. PTX像汇编一样,描述了低级的指令和寄存器操作
    5. PTX是一种虚拟ISA(中间表示),不是直接针对某一代GPU硬件;而传统汇编(如x86、ARM)是直接针对具体CPU的
    6. PTX还会被进一步编译为SASS(即真正的NVIDIA GPU汇编指令,针对特定GPU架构,如Volta、Ampere等)
    1. SASS(Streaming Assembler)是NVIDIA GPU的底层指令集架构,直接对应某一代GPU硬件
    2. 它是真正可以在GPU上执行的汇编指令,和x86/ARM汇编很像,但专为NVIDIA GPU设计
    3. 本质上,SASS就是GPU的“汇编”语言
    4. NVIDIA官方并没有发布SASS的完整文档,而且它没有类似PTX那种规范的文本格式标准
    1. 我的理解:SASS和cubin就是一个东西(或者说一个阶段的产物),只是SASS是文本,cubin是二进制
  2. fatbin
    1. 就是多个SM的cubin的打包?

nvcc的一些编译命令(用于生成中间产物)

# AI生成,未测试

# PTX
nvcc -arch=sm_70 -ptx kernel.cu -o kernel.ptx

# fatbin
nvcc -arch=sm_70 --fatbin kernel.cu -o kernel.fatbin

参考资料

  1. CUDA 动态编译(NVRTC)简记 https://www.cnblogs.com/time-flow1024/p/9974540.html (这篇文章是不是理解错了NVRTX?)
  2. CUDA fatbin格式剖析及PTX压缩算法 https://zhuanlan.zhihu.com/p/693323177
/var/www/DokuWikiStick/dokuwiki/data/pages/程序/cuda/编译流程.txt · Last modified: 2025/07/20 13:14 by zhonghui