You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CUDA统一内存预取显存异常下降及CPU访问后未释放问题咨询

CUDA Unified Memory 测试问题解答

问题1:首次预取小容量UM内存时显存下降幅度远大于实际分配大小的原因

你观察到的约128MB显存下降(计算可得:16804216832 - 16669999104 = 128MB)是CUDA驱动的UM内存池预分配策略导致的:

  • Tesla P100属于Pascal架构,CUDA驱动为了降低频繁小容量UM内存分配的开销,会在UM内存第一次被映射到GPU时,预分配一块较大的连续显存作为UM专属的显存池,你申请的2KB数组只是从这个128MB的预分配池中分配的一小块,不会触发额外的显存占用。
  • 后续再分配其他小容量UM内存并预取到GPU时,显存不会再出现大幅下降,只会从已有的预分配池中划取空间,只有当预分配池被占满后才会再次扩容。

问题2:UM内存预取到CPU后GPU显存未释放的原因

这是离散GPU UM的默认缓存策略导致的,和你理解的"访问即驱逐"逻辑有差异:

  • cudaMemPrefetchAsync的作用是将内存的最新副本同步到目标设备,并不会主动删除源设备上的副本;cudaMemAdviseSetPreferredLocation仅设置内存的优先存放位置,也不会强制回收另一端的副本。
  • 在GPU显存剩余充足的场景下,驱动会保留已迁移到CPU的UM内存的GPU侧副本作为缓存,若后续需要再次在GPU访问该内存,可直接使用缓存副本避免重复PCIe传输,只有当GPU显存出现不足时,驱动才会主动驱逐这些长期未访问的UM页面,释放对应的显存空间。
  • 你可以尝试在预取到CPU后,再调用cudaMalloc分配一块接近剩余显存大小的空间,就能观察到原UM内存占用的GPU显存被回收的现象。

内容的提问来源于stack exchange,提问作者Dhruv Deshmukh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:54:04