第 1 章 SDMA 是什么:GPU 里的异步搬运工

发布时间:2026/8/18 10:13:44
第 1 章 SDMA 是什么:GPU 里的异步搬运工 本章目标先在脑子里建立SDMA 是什么、为什么需要它、它到底干哪几件事的直觉。读完本章你应该能用一句话向别人解释 SDMA。1.1 一句话定义SDMASystem DMA是 GPU 上一组独立于图形GFX和计算Compute引擎之外的专用DMA 引擎负责在后台异步地搬运数据和更新页表。“System DMA” 里的 System强调它擅长在系统内存system memory与显存VRAM之间搬运数据DMADirect Memory Access则说明它不需要 CPU 逐字节参与拷贝。1.2 为什么需要一个专用的 DMA 引擎在没有 SDMA 的世界里往显存里搬数据有两条笨路CPU 亲自搬memcpy通过 PCIe BAR 一个字一个字地写显存。慢、占用 CPU、还会阻塞主线程。让 GFX 引擎搬图形引擎当然也能做拷贝但它是主力干活的让它去搬数据等于让主厨去端盘子——占用了宝贵的图形/计算吞吐。SDMA 的价值就体现在三个词上异步asynchronous提交任务后 CPU 立刻返回去干别的搬运在后台进行。并行parallelSDMA 与 GFX/Compute 是物理上独立的硬件单元可以真正同时工作。渲染的同时预取下一帧纹理就是靠它。卸载offload把纯搬运工作从 CPU 和 GFX 上卸下来各司其职。一个经典类比GFX 引擎是主厨SDMA 是传菜和备料的帮工。主厨专心炒菜渲染/计算帮工在旁边不停地把食材纹理、buffer、页表搬到该在的位置两者互不打断。1.3 SDMA 到底干哪几件事在 amdgpu 驱动里SDMA 主要承担三类职责。记住这三件事后面所有章节都是围绕它们展开职责一内存拷贝 / 填充Copy Fill最本职的工作——把一块内存的数据搬到另一块或者用某个值填满一块内存。典型场景BOBuffer Object在system memory ↔ VRAM之间迁移TTM 子系统做显存腾挪时的数据搬运清零一块新分配的显存。对应驱动里的amdgpu_buffer_funcsemit_copy_buffer/emit_fill_buffer详见第 11 章。职责二页表更新Page Table UpdateGPU 有自己的虚拟内存VM和多级页表。当一段 GPU 虚拟地址的映射发生变化时——比如新分配、迁移、解除映射——需要把新的PTE/PDE页表项写进显存里的页表结构。这件事也交给 SDMA 来做因为页表更新本质上就是往特定地址写一批数据正是 DMA 的强项它可以异步进行不打断正在运行的计算任务SDMA 甚至有专门的页表操作指令PTEPDE一条命令批量更新连续页表项。对应驱动里的amdgpu_vm_pte_funcscopy_pte/write_pte/set_pte_pde详见第 12 章。这也是 SDMA 与内存管理、SVM 产生联系的关键。职责三作为一条标准队列参与调度Ring / IBSDMA 并不是一个给个地址就搬的黑盒它对外表现为一条或多条ring环形命令队列。驱动把要它干的活儿编成一串命令packet写进 ring硬件从 ring 里取出命令依次执行。这意味着 SDMA 完整地融入了 amdgpu 的通用队列基础设施用ring buffer传递命令用IBIndirect Buffer间接缓冲区承载较大的命令流用fence通知任务完成接入GPU scheduler参与统一调度。这一层是理解软件实现的钥匙详见第 6 章、第 8 章。1.4 与其它搬运方式的对比搬运方式是否占用 CPU是否占用 GFX是否异步典型用途CPU memcpy走 BAR是否否小数据、初始化GFX 引擎拷贝否是是与渲染耦合的搬运SDMA否否是大块搬运、页表更新、迁移结论很直接只要是纯搬运或页表维护且希望不打断计算/渲染就应该走 SDMA。1.5 一张图先建立全局观amdgpu 驱动doorbell 通知SDMA 硬件引擎 (多实例)读取命令流 → 执行 拷贝/填充/页表写 → 触发 fence 中断BO 迁移 / TTMVM 页表更新通用提交buffer_funcsvm_pte_funcsring/IB 提交SDMA ring 命令队列图里的每一个方框后面都会有专门的章节展开。现在你只需要记住这个从上层用例汇聚到ring再交给硬件执行的大致流向。1.6 本章小结SDMA 是 GPU 上独立、异步、专用的 DMA 引擎与 GFX/Compute 并行工作。它干三件事① 内存拷贝/填充 ② 页表更新 ③ 作为 ring 参与调度。它存在的意义是把纯搬运和页表维护从 CPU、GFX 上卸载下来让各引擎各司其职。页表更新这一职责是 SDMA 连接到VM / SVM 内存管理的桥梁是本系列的重点伏笔。下一章预告我们进入硬件模型看看 ring buffer 的 RPTR/WPTR 指针、doorbell 敲门机制以及一个实例两条队列的硬件由来——这些概念是理解软件实现的物理基础。

相关新闻