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的物理架构与虚拟化切分的对应关系:

GPU物理架构与虚拟化切分映射 GPU 芯片 (Die) SM 阵列 (TPC/GPC) SM 0 CUDA/Tensor SM 1 CUDA/Tensor SM 2 CUDA/Tensor SM 3 CUDA/Tensor ... 更多SM ... L2 缓存 (切片) MIG 硬件隔离边界 内存控制器 HBM3e / GDDR6X 接口 NVDEC/NVENC 视频编解码 Copy Engines DMA 数据搬运 显存 HBM3e 容量分区 带宽隔离 ECC 保护 地址映射 持久内存 BAR 窗口 PCIe Gen5 x16 / NVLink SR-IOV PF/VF 创建边界 | 多卡互联 高带宽总线 虚拟化抽象层 MIG 实例 vGPU (SR-IOV) 时间片切分 SM 分区 L2 切片隔离 显存地址重映射 编解码引擎独占 每个虚拟实例拥有 独立的显存视图 独立的SM调度 独立的DMA通道 硬件级隔离 vs 软件级隔离
关键认知:MIG(多实例GPU)的硬件隔离边界在L2缓存与内存控制器层面,而vGPU(基于SR-IOV)的隔离更多依赖PCIe的地址翻译与DMA重映射。理解这一差异,是选择虚拟化方案的基础。

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周期)差异巨大。虚拟化引入的额外开销主要在于:

  1. 地址翻译:虚拟机物理地址 → GPU物理地址的转换,增加TLB miss开销。
  2. DMA重映射:IOMMU/硬件辅助翻译带来的延迟。
  3. 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的全局地址空间被划分为多个窗口,每个实例的显存访问被限制在其窗口内。
常见误区:初学者常认为MIG是“软件层面的分区”,实际上MIG是硬件级隔离——每个实例拥有独立的L2缓存切片、内存控制器和显存地址窗口,故障隔离和性能隔离都达到硬件级别。而vGPU(如vGPU基于SR-IOV)更多依赖软件Hypervisor的地址翻译,隔离强度弱于MIG,但灵活性更高。

2.5 误区与复盘:虚拟化场景下的常见认知偏差

在GPU虚拟化实践中,以下认知误区需要特别警惕:

误区 实际情况 后果
“GPU显存大,虚拟化后性能损失可忽略” 显存带宽是共享资源,MIG切分后带宽按比例分配 内存密集型应用性能下降超预期
“SM数量越多越好” SM调度需要warp级同步,跨实例通信开销大 小规模任务不适合分配过多SM
“L2缓存是全局共享的,无需隔离” MIG的L2切片隔离是性能隔离的关键 未隔离时,一个实例的缓存污染影响其他实例
“统一内存(UM)在虚拟化中透明可用” UM依赖硬件页错误机制,虚拟化环境可能不支持 程序崩溃或性能骤降

复盘建议:在规划GPU虚拟化方案时,应首先分析应用的内存访问模式(是否带宽敏感)、SM利用率(是否计算密集)以及通信模式(是否需要跨实例通信)。例如,深度学习推理任务通常对显存容量敏感但对带宽不敏感,适合MIG切分;而HPC科学计算往往需要大量L2缓存命中,此时应选择较大的MIG实例或独占GPU。