caffe syncedmen 程序分析

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

版权声明:本文为博主原创文章,未经博主允许不得转载。


你可能感兴趣的:(caffe syncedmen 程序分析)