使用 01_dma_bandwidth.py 测量 pageable (malloc) vs pinned (cudaMallocHost) 内存的 CPU↔GPU 传输带宽,验证 pinned memory 的加速效果。
5 分钟
cd code/
python3 01_dma_bandwidth.py
实测环境: 8×H100 80GB HBM3, PCIe Gen5 x16
Size Dir Pageable Pinned Ratio
------------------------------------------------
0.5GB H2D 17.0 GB/s 54.7 GB/s 3.2x
1.0GB H2D 21.3 GB/s 54.8 GB/s 2.6x
2.0GB H2D 21.4 GB/s 54.8 GB/s 2.6x
4.0GB H2D 21.4 GB/s 54.9 GB/s 2.6x
0.5GB D2H 14.6 GB/s 46.8 GB/s 3.2x
1.0GB D2H 16.7 GB/s 47.0 GB/s 2.8x
Pinned H2D ~55 GB/s(DMA 直传,86% PCIe 效率),Pageable ~21 GB/s(CPU 页表遍历瓶颈)。D2H 比 H2D 更慢 — CPU 端接收开销更大。
malloc): 每次 cudaMemcpy 内核都要遍历页表 + 锁定页面 + 构建 scatter-gather listcudaMallocHost): 页面预先锁定,DMA 引擎直接读取物理地址,无 CPU 开销