QEMU 训练营 2026 专业阶段总结¶
主要贡献者
背景介绍¶
我是一个今年刚刚结束校招的双非计算机研究生,目前入职了一家算力卡 gpgpu 公司,想去提前学习一些 gpu 的知识,所以打算参加 QEMU 训练营 2026 专业阶段。
项目概述¶
我选择的实验方向是 gpu 方向。
本项目基于 QEMU 实现了一个虚拟 PCIe GPGPU 设备,通过软件方式模拟 GPU 的基本硬件行为。项目主要涵盖 PCI 设备注册、MMIO 寄存器设计、VRAM 映射、DMA 数据传输、内核分发机制以及简化的 SIMT 执行模型。
通过该项目,可以较为系统地理解 QEMU 设备建模流程、PCIe 设备抽象、GPU 运行时的基本硬件语义,以及指令解释器在虚拟设备中的实现方式。整体来看,该项目不仅是一个 QEMU 设备开发实践,也具有一定的计算机体系结构和 GPGPU 执行模型学习价值。
学习内容¶
1. QEMU PCI 设备框架¶
项目首先完成了虚拟 PCIe 设备的注册与初始化,涉及 QEMU Object Model 设备模型、PCI 设备生命周期管理以及 BAR 空间映射等内容。
通过该部分实践,掌握了 QEMU 中设备从注册、实例化到销毁的基本流程,并理解了虚拟设备如何通过 BAR 向客户机暴露控制寄存器、显存空间和 Doorbell 区域。
2. MMIO 寄存器与设备控制接口¶
项目设计了一组 MMIO 控制寄存器,用于描述设备信息、全局控制、中断状态、内核分发、DMA 传输以及 SIMT 上下文等功能。
通过寄存器读写回调函数,客户机可以访问虚拟 GPU 的控制接口。该部分模拟了真实硬件中驱动程序通过 MMIO 寄存器控制设备行为的过程,例如写入分发寄存器后触发 kernel 执行,或通过状态寄存器查询 DMA 和计算任务的完成情况。
3. VRAM 与 DMA 数据传输¶
项目使用动态分配的内存模拟 GPU 显存,并通过 QEMU 的 MemoryRegion 机制将其映射为设备 BAR 空间。客户机可以通过该区域读写显存数据。
同时,项目实现了简化的 DMA 引擎,用于模拟主机内存与设备显存之间的数据传输过程。DMA 操作通过定时器模拟传输延迟,并在完成后触发中断,从而较好地体现了设备异步传输和中断通知的基本机制。
4. SIMT 执行模型¶
项目实现了一个简化的 SIMT 执行框架,用于模拟 GPU 中 Grid、Block、Warp 和 Lane 的线程层次结构。
在该模型中,一个 Warp 内的多个 Lane 以锁步方式执行同一条指令,并通过 active mask 管理线程活跃状态。每个 Lane 拥有独立的寄存器、程序计数器和浮点状态,从而能够模拟 GPU 线程在同一指令流下处理不同数据的执行方式。
5. RISC-V 指令解释器¶
项目核心部分是一个面向 RISC-V 指令集的 SIMT 指令解释器,支持常见的 RV32I 整数指令和部分 RV32F 浮点指令。
整数指令部分覆盖了算术逻辑、分支跳转、访存和系统指令等基本功能;浮点指令部分支持基本运算、数据转换、比较、分类以及融合乘加等操作。浮点计算使用 QEMU softfloat 接口实现,从而保证了舍入、异常标志和 NaN 传播等行为更加接近真实硬件。
6. 低精度浮点扩展¶
在基础 RISC-V 指令解释器之外,项目还扩展了多种低精度浮点格式,包括 BF16、FP8 和 FP4 等。
该部分主要用于模拟近年来 AI 计算中常见的低精度数据格式。通过对不同浮点格式的编码、解码、舍入和饱和处理进行实现,可以加深对低精度计算、数值范围、精度损失以及硬件友好型数据表示方式的理解。
7. Kernel 调度与执行流程¶
项目通过内核分发寄存器启动计算任务,并在虚拟 GPU 内部按照 Grid 和 Block 的层次结构遍历执行所有 Warp。
整个执行过程采用同步模拟方式,即 kernel 在 dispatch 时被直接执行完成。为了避免异常程序导致模拟器长时间卡死,项目还加入了执行周期上限和错误状态记录机制,用于模拟 kernel fault 等异常情况。
项目收获¶
通过该项目,主要获得了以下几方面的理解:
- 理解了 QEMU 中虚拟 PCIe 设备的基本开发流程。
- 掌握了 MMIO、BAR、VRAM、DMA 和 MSI-X 中断等设备建模方法。
- 熟悉了 GPU 中 Grid、Block、Warp 和 Lane 的 SIMT 执行思想。
- 掌握了 RISC-V 指令解释器的基本实现方式。
- 理解了浮点运算、softfloat 异常处理和低精度浮点格式的实现细节。
- 对 GPGPU 用户态驱动、运行时接口和底层硬件语义之间的关系有了更直观的认识。
总结¶
本项目以 QEMU 为基础,实现了一个具有完整结构的虚拟 PCIe GPGPU 设备。虽然该实现是教学和实验性质的简化版本,但已经覆盖了虚拟设备建模、寄存器控制、显存访问、DMA 传输、SIMT 执行、RISC-V 指令解释以及低精度浮点扩展等关键内容。
整体而言,该项目适合作为 QEMU 设备开发、GPGPU 架构理解和计算机体系结构实践的综合训练项目,也能够为后续学习 GPU 开发打下基础。