caffe syncedmen 程序 用来管理内存分配,和GPU和CPU之间的同步。
这个程序调用了上次讲的 #include "caffe/common.hpp" 程序。
从理论上讲, CaffeMallocHost和CaffeFreeHost应该简单地调用cudaMallocHost和cudaFree函数来创建固定的内存
然而,这些代码依赖于CUDA GPU 的存在(我不知道这是为什么,因为分配的内存必须不能访问GPU资源,但它只是产生一个误差的Cuda5.0),将导致在没有GPU的一台机器上运行时的问题。因此,我们简单地定义这两个函数的安全和可能的变化,如果问题
在以后的版本//调用CUDA功能的消失。
实际上,尽管我们正在创造取消固定内存在这里,只要我们不断访问它们的内存页几乎总是停留在物理内存(假设我们有安装足够大的存储器),以及似乎没有在这里创建出内存瓶颈。
SyncedMemory::~SyncedMemory()
功能:析构函数
步骤:1.如果有CPU数据则释放
2.如果有GPU数据则释放
inline void SyncedMemory::to_cpu()
功能:把数据放到cpu上
1.数据未初始化,则在cpu申请内存(申请为0)。此时状态为HEAD_AT_CPU
2.数据本来在gpu,则从gpu拷贝内存到cpu。此时状态为SYNCED
3.数据本来在cpu,不做处理
4.数据在cpu和gpu都有,不做处理
inline void SyncedMemory::to_gpu()
功能:把数据放到gpu上
1.数据未初始化,在gpu申请内存(申请为0)。此时状态为HEAD_AT_GPU
2.数据在cpu,从cpu拷贝到gpu。此时状态为SYNCED
3.数据在gpu,不做操作。
4.数据在cpu和gpu都有,不做操作。
const void* SyncedMemory::cpu_data()
功能:返回数据在cpu的指针
void SyncedMemory::set_cpu_data(void* data)
功能:清空CPU的数据
void* mutable_cpu_data()
功能:返回数据在cpu的指针,并改变数据的状态为HEAD_AT_CPU
void* mutable_gpu_data()
功能:返回数据在cpu的指针,并改变数据的状态为HEAD_AT_GPU
版权声明:本文为博主原创文章,未经博主允许不得转载。