mxnet 源码阅读 5

mxnet/src/storage/storage_manager.h

mxnet/src/storage/pooled_storage_manager.h

 

storage_manager.h 中的类StorageManager是抽象的接口层,以纯虚函数 Alloc Free DirectFree 给出,该类属于mxnet 下的storage名字空间。

GPUPooledStorageManager 继承自StorageManager,在其构造函数中通过获取环境变量MXNET_GPU_MEM_POOL_RESERVE设置GPU内存保留大小百分比,如果该参数没有设置则默认为5

同时析构函数释放所有GPU 显存。

重载的Alloc Free 和DirectFree 通过unordered_map< size, vector<void*> > 以内存大小作为键,内存地址vector作为值,例如 5M的地址对应 0x00002 0x00007 等。

Alloc函数执行时先检查内存池中是否有该大小的内存,如果有则返回该地址,并且在内存池中移除该地址;如果没有则申请之。

Free函数直接将要free的地址添加到内存池map中。

当然该类必然有接口可以实现内存的释放,DirectFree和析构函数都可以完成该任务,其中DirectFree释放给定地址的内存空间,析构函数调用ReleaseAll释放所有内存池。

 

上面所有的内存都是指GPU显存。

 

posted on 2017-08-09 09:54  reedlau  阅读(528)  评论(0编辑  收藏  举报

导航