本文是作者原创,如有理解错误,恳请大家指出,如需引用,请注明出处。
Blob内存管理分析
在caffe的分层结构中,Blob充当了内存管理的角色,屏蔽了上层逻辑代码对于数据的申请释放的感知,同时也屏蔽了底层设备对上层逻辑的影响,本文主要分析Blob的管理机制和实际内存申请单元SyncedMemory 的机制。
首先我们看一下Blob和SyncedMemory的关系,类图如下:
实际上整个Blob的实现就是在SyncedMemory上封装了一层,所以首先需要分析一下SyncedMemory的实现机制。
SyncedMemory的实现机制
SyncedMemory的目的是为了屏蔽上层代码对不同硬件设备的内存分配的感知,同时隐藏了CPU和GPU之间的同步过程。同时,SyncedMemory实现时,采用的是 “lazy”的模式,就是内存的实际申请时机是在第一次使用时进行的。有了大体的了解,下面我们来详细分析一下。
下面是SyncedMemory 提供的一组接口,
名称 | 功能 |
---|---|
cpu_data() | 获取CPU数据指针 |
gpu_data() | 获取GPU数据指针 |
实现的