乐于分享
好东西不私藏

PyTorch源码:PyTorch是怎么管理显存的(4)

本文最后更新于2025-06-19,某些文章具有时效性,若有错误或已失效,请在下方留言或联系老夜

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

PyTorch源码:PyTorch是怎么管理显存的(4)

源码分析:图2-18\nTL;DL:DeepSeek:\n🔥PyTorch显存分配核心机制精要:\n三大状态流转\nunmap:保留虚拟地址💻但未分配物理显存(ExpandableSegment预留1.125倍地址空间🌌)\nblocks:已分配物理显存但未使用(缓存池✨)\nactive:已被Tensor占用(用户可见状态🚀)\n分配四步曲\n搜索缓存:优先从blocks池找最小满足需求的block(best-fit算法🔍)\n扩展段激活(若开启优化):\n从unmap切分虚拟地址→映射物理显存(map_block)\n超大虚拟段(1.125×显存)分裂为活跃块+剩余缓存块+未映射段✂️\n阶梯分配:\n缓存不足→尝试切分unmap段\n仍失败→新建ExpandableSegment(触发CUDA地址空间预留🌐)\n碎片优化:\n分配成功块若过大→自动分裂(e.g. 2MB块拆出512B+1.5MB)\n剩余空间回收入blocks池♻️\n关键创新\n延迟物理分配:虚拟地址预保留→按需映射显存(减少cudaMalloc调用⏳)\n三级缓存池:unmap/blocks/active状态机实现显存高效复用🔄\n智能分裂:小请求(≤1MB)分配2MB物理块→后续请求直接复用缓存🚀\n核心价值:虚拟地址预占+物理显存按需激活=极致性能与碎片平衡⚖️!
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » PyTorch源码:PyTorch是怎么管理显存的(4)
×
订阅图标按钮