蚁工厂
26-08-22 16:24 微博认证:科技博主

技术博文 What happens when you run a CUDA kernel
地址:fergusfinn.com/blog/what-happens-when-you-run-a-gpu-kernel/

文章以一个把两组百万元素向量相加的简单程序为线索,完整追踪了一次 CUDA kernel 的生命周期。
nvcc 先把设备代码编译为 PTX,再由 ptxas 生成面向 RTX 4090 的 SASS,并把两者封装进主机可执行文件;
程序启动时,CUDA 运行时注册内核,首次调用再延迟加载 GPU 代码。驱动随后把启动参数、网格尺寸、代码地址和完成信号封装进 QMD,通过 pushbuffer、GPFIFO 和一次“doorbell”寄存器写入通知 GPU。
GPU 的工作分配器把 4096 个 block 分派给 128 个 SM,各 warp 调度器根据编译器写入指令的停顿计数和依赖屏障选择可执行 warp;连续内存访问被合并,经 L1、L2 和显存读取数据。

这个例子计算量极低,实际瓶颈是显存带宽:kernel 约运行 10.78 微秒,DRAM 利用率接近峰值的八成。完成后,GPU 写入信号量,复制引擎把仍在 L2 缓存中的结果经 PCIe 送回 CPU,最终由 printf 输出结果。

发布于 山东