GPU基础架构:硬件组成、计算模型与内存层次
要理解GPU虚拟化与资源隔离,首先必须建立对GPU物理架构的清晰认知。虚拟化本质上是对物理资源的抽象、切分与调度,如果对底层硬件缺乏准确理解,后续的MIG、vGPU、时间片切分等概念都将成为无源之水。本节从硬件组成、计算模型、内存层次三个维度,拆解现代数据中心GPU(以NVIDIA Ampere及Hopper架构为典型代表)的核心结构。
2.1 硬件组成:从芯片到整卡的功能划分
现代GPU并非一个“超大核”,而是一个由多种异构引擎组成的复杂SoC(片上系统)。从虚拟化视角看,我们需要关注以下关键硬件单元:
- GPU芯片(Die):包含所有计算与渲染核心,是物理资源切分的基本边界(如MIG基于芯片级切分)。
- 流式多处理器(SM / SMX):GPU的基本计算单元,内部包含CUDA核心、Tensor Core、SFU(特殊函数单元)等。每个SM拥有独立的寄存器文件和共享内存。
- 内存控制器与显存(HBM/GDDR):显存通过内存控制器与芯片相连,带宽极高但容量有限。虚拟化时需要隔离显存带宽与容量。
- L2缓存:芯片上的最后一级统一缓存,所有SM共享。MIG的硬件隔离即通过划分L2切片实现。
- PCIe控制器与NVLink接口:负责CPU通信与多卡互联。SR-IOV虚拟化正是基于PCIe物理功能(PF)创建虚拟功能(VF)。
- 视频编解码引擎(NVDEC/NVENC):独立的硬件单元,在vGPU场景中需要单独分配。
- DMA引擎与复制引擎(Copy Engines):负责数据搬运,支持异步操作,虚拟化时需要保证DMA隔离。
下图展示了现代GPU的物理架构与虚拟化切分的对应关系:
2.2 计算模型:线程层次与调度单元
GPU的计算模型采用单指令多线程(SIMT)架构。CUDA将计算抽象为三层线程结构,理解这一层次是掌握GPU资源切分的核心:
| 层次 | 硬件映射 | 虚拟化影响 |
|---|---|---|
| Thread(线程) | CUDA Core 执行单元 | 线程级并行,虚拟化时由SM调度器透明管理 |
| Warp(线程束) | 32个线程为一组,由SM的Warp Scheduler调度 | warp是SM调度的最小单位,虚拟化切分SM时以warp为粒度 |
| Thread Block(线程块) | 映射到SM,块内线程共享共享内存 | MIG切分时,一个block不能跨SM切片运行 |
| Grid(网格) | 由多个block组成,对应一个kernel启动 | 虚拟化环境下,grid可被调度到不同物理GPU |
SM内部的调度流程如下:
GPU Kernel 启动
└─> Grid 被划分为多个 Thread Block
└─> Block 被分配到 SM(一个SM可并发多个Block)
└─> SM 将 Block 中的线程划分为 Warp(32线程/组)
└─> Warp Scheduler 每个周期选择可执行的 Warp
└─> 执行单元(CUDA Core / Tensor Core)执行指令
在虚拟化场景中,Warp调度器是时间片切分的关键硬件。当多个vGPU共享一个物理SM时,硬件Warp调度器通过时分复用方式,在不同虚拟机的warp之间快速切换。这种切换的代价极低(纳秒级),但会引入一定的调度延迟。
2.3 内存层次:从寄存器到全局显存
GPU内存层次是性能优化的核心,也是虚拟化内存隔离的基础。完整的内存层级如下:
- 寄存器文件(Register File):每个SM内部,容量最小(如256KB/SM),速度最快。虚拟化时,寄存器是线程上下文的一部分,切换vGPU时需要保存/恢复。
- 共享内存(Shared Memory):每个SM的片上高速存储,可编程管理。MIG切分时,共享内存按SM切片独占。
- L1缓存:与共享内存共用物理存储,用于缓存全局内存访问。
- L2缓存:芯片级统一缓存,所有SM共享。MIG通过L2切片实现缓存隔离。
- 全局显存(Global Memory):HBM/GDDR,容量最大(可达80GB+),通过内存控制器访问。虚拟化时通过地址重映射为每个实例分配独立地址空间。
- 常量内存与纹理内存:经过优化的只读路径,有独立的缓存。
内存访问延迟从寄存器(~1周期)到全局显存(~400-800周期)差异巨大。虚拟化引入的额外开销主要在于:
- 地址翻译:虚拟机物理地址 → GPU物理地址的转换,增加TLB miss开销。
- DMA重映射:IOMMU/硬件辅助翻译带来的延迟。
- L2隔离:MIG切分后,L2命中率可能下降(因为切片变小)。
cudaMallocManaged托管内存时,注意GPU虚拟化可能不支持统一内存的硬件加速,需回退到显式拷贝。
2.4 案例:MIG切分与内存隔离的硬件实现
以NVIDIA A100(40GB HBM2e)为例,MIG支持将GPU切分为最多7个实例。硬件层面的实现机制如下:
A100 GPU 物理资源
├── 7个 GPC(图形处理簇)
├── 42个 SM(每个GPC含6个SM)
├── 40GB HBM2e 显存
└── 8个 HBM 内存控制器
MIG 切分示例(3个实例):
├── 实例1: 2 GPC, 12 SM, 8GB 显存, 2个内存控制器
├── 实例2: 2 GPC, 12 SM, 8GB 显存, 2个内存控制器
└── 实例3: 3 GPC, 18 SM, 24GB 显存, 4个内存控制器
MIG的硬件隔离通过以下机制实现:
- SM分区:每个GPC内的SM被完整分配给一个实例,SM之间不共享。
- L2缓存切片:L2缓存被划分为多个切片,每个实例独占其分配的切片,避免缓存污染。
- 内存控制器分区:每个内存控制器管理固定的显存地址范围,实例只能访问分配给它的控制器。
- 全局地址重映射:GPU的全局地址空间被划分为多个窗口,每个实例的显存访问被限制在其窗口内。
2.5 误区与复盘:虚拟化场景下的常见认知偏差
在GPU虚拟化实践中,以下认知误区需要特别警惕:
| 误区 | 实际情况 | 后果 |
|---|---|---|
| “GPU显存大,虚拟化后性能损失可忽略” | 显存带宽是共享资源,MIG切分后带宽按比例分配 | 内存密集型应用性能下降超预期 |
| “SM数量越多越好” | SM调度需要warp级同步,跨实例通信开销大 | 小规模任务不适合分配过多SM |
| “L2缓存是全局共享的,无需隔离” | MIG的L2切片隔离是性能隔离的关键 | 未隔离时,一个实例的缓存污染影响其他实例 |
| “统一内存(UM)在虚拟化中透明可用” | UM依赖硬件页错误机制,虚拟化环境可能不支持 | 程序崩溃或性能骤降 |
复盘建议:在规划GPU虚拟化方案时,应首先分析应用的内存访问模式(是否带宽敏感)、SM利用率(是否计算密集)以及通信模式(是否需要跨实例通信)。例如,深度学习推理任务通常对显存容量敏感但对带宽不敏感,适合MIG切分;而HPC科学计算往往需要大量L2缓存命中,此时应选择较大的MIG实例或独占GPU。