VMM: 显存管理
理解 VMM 最好的类比是 “送快递的地址 vs 实际房子”:
没有 VMM 的世界 (cudaMalloc):
你租了一套房(分配物理显存)
+ 同时给了你一个地址(虚拟地址)
↓
这两件事绑死了:退租(free)→ 地址也没了
想换一间大房子?原地址作废,所有朋友给你寄的东西都丢了
有了 VMM 的世界:
第 1 步:租一套房(cuMemCreate)- 只有房子,没挂地址
第 2 步:注册一个地址(cuMemAddressReserve)- 只有地址,地址下还没房子
第 3 步:把房子关联到地址(cuMemMap)- 现在能用了
第 4 步:发钥匙给你(cuMemSetAccess)- 允许你访问
好处:可以暂时退租房子(cuMemUnmap),但地址保留
以后你重新租房,挂回同一个地址
你的朋友(Tensor、NCCL handle)一直用这个地址,不会丢
传统 cudaMalloc 的问题
|
|
具体例子展示问题所在:
|
|
VMM API 的四步分配
CUDA VMM API (CUDA 10.2+) 把这个过程拆成了独立的四步:
Step 1: 创建物理显存句柄(只分配物理)
|
|
Step 2: 预留虚拟地址空间(只占地址,不用物理)
|
|
Step 3: 把物理显存映射到虚拟地址
|
|
Step 4: 设置访问权限
|
|
关键的"解耦"操作
|
|
Linked Mentions
-
No backlinks found.