AI Pulse
📡 X 信号

@gpusteve 分享从零学CUDA编译、PTX、寄存器溢出与GPU反汇编的入门资源

@gpusteve 分享从零学CUDA编译、PTX、寄存器溢出与GPU反汇编的入门资源

如果我的“优化”内核反而变慢了,而我又得从零开始学习 CUDA 编译、PTX、寄存器溢出和 GPU 反汇编,我会从这里入手。链接见推文串 🧵

我们的 AI 性能工程仓库中的编译与机器代码部分,收录了四份 NVIDIA 资料,帮助理解 CUDA 源码如何变成 GPU 指令,以及如何检视 AI 内核背后的代码:

《Understanding PTX》讲解了 nvcc 如何分离 CPU 与 GPU 代码、PTX 为何是一种虚拟指令集,以及 ptxas 如何将其转换为 cubin。该文还涵盖了 fatbin、驱动 JIT 编译和 GPU 兼容性,为部署目标和推理启动成本提供了背景知识。

《nvcc compiler driver》介绍了 GPU 架构目标、各编译阶段生成的文件、独立编译和设备链接。这份 nvcc 指南讲解了如何保留中间文件,并报告寄存器使用量、共享内存以及溢出加载与存储。这些编译器报告有助于在修改 tile 大小、展开或融合后对比不同内核构建版本。

《PTX ISA》定义了寄存器、本地、共享和全局地址空间;内存排序与同步;以及算术和矩阵指令。PTX ISA 详细说明了操作数布局、数据类型、累加精度和 GPU 要求,以及异步拷贝的完成规则。对于检查 attention 和 matmul 内核中的数据移动和数值行为很有用。

《CUDA Binary Utilities》介绍了如何提取内嵌的 PTX 和 cubin、反汇编原生 GPU 指令(SASS),以及使用 cuobjdump 报告寄存器数量和静态内存使用情况。当 cubin 包含完整的重定位信息时,nvdisasm 可以提供控制流图,以及寄存器活跃性视图。借助调试行信息,nvdisasm 还可以用源代码行标注指令。在内核重写后,这对于检视生成的加载、存储、分支和算术指令很有用。

这些资料将编译过程与正在测量的代码联系起来。它们有助于识别不同内核构建版本之间发生了什么变化,以及在进行下一次正确性检查或基准测试前应该调查什么。

关注并收藏,以便跟进本系列。

《Understanding PTX, the Assembly Language of CUDA GPU Computing》,作者 Tony Scudiero 和 Jonathan Bentz,NVIDIA

《NVIDIA CUDA Compiler Driver NVCC》,NVIDIA

《Parallel Thread Execution ISA》,NVIDIA

《CUDA Binary Utilities》,NVIDIA

AI 性能工程,由 Wafer 整理

本文由 AI 翻译自英文原帖,技术名词保留英文。

查看 X 原帖

订阅 AI Pulse

每天 08:00 · 12:30 · 18:30 · 23:50 更新