Caffe中SyncedMemory类阅读
来源:互联网 发布:linux如何修改机器名 编辑:程序博客网 时间:2024/05/17 18:44
SyncedMemory简单的管理分配内存,并且负责同步CPU和GPU。
1.成员变量
void* cpu_ptr_;\\cpu中指针void* gpu_ptr_;\\GPU中指针size_t size_;\\数据大小SyncedHead head_;\\当前数据状态bool own_cpu_data_;\\cpu数据释放被本类所拥有,即没有其他指针指向该数据。bool cpu_malloc_use_cuda_;\\分配cpu内存是否用的cudaMallocHost()分配。bool own_gpu_data_;\\作用own_cpu_data类似int gpu_device_;\\GPU序号
关于SymceHead,有四种状态,分别是未初始化,数据在 cpu 中,数据在 gpu 中,数据在 cpu 和 gpu 中都有。enum SyncedHead { UNINITIALIZED , HEAD_AT_CPU , HEAD_AT_GPU , SYNCED };
2.函数
inline函数
inline void CaffeMallocHost(void** ptr, size_t size, bool* use_cuda);inline void CaffeFreeHost(void* ptr, bool use_cuda);
分别是分配和释放内存,这里指的是CPU内存。
私有成员函数
void to_cpu(); void to_gpu();
分别为将数据导入CPU和GPU。
共有成员函数
首先是构造函数
SyncedMemory();explicit SyncedMemory(size_t size);
第一个为简单初始化,第二个只是把 size (大小)设置了,并未申请内存。
然后是析构函数
~SyncedMemory();
主要就是释放数据。这里说明一点是,own_gpu_data和own_cpu_data。这两个成员变量的作用我是到这里才明白。表示是否拥有该数据,也即在cpu或gpu中是否有其他指针指向该数据。
接下来可能看着比较繁琐无趣了。
const void* cpu_data();const void* gpu_data();
分别是获取cpu,gpu中数据的指针,需要说明的一点是,该过程会同步数据。
有获取,就有设置,下面两个函数就是设置数据了。
void set_cpu_data(void* data);void set_gpu_data(void* data);
需要说明的是,这里设置后就不是拥有该数据,即own_cpu_data或own_gpu_data就为false,因为还有data指向该数据。一般来说,只有当同步后才会为true。也即to_cpu()或者to_gpu()后。
void* mutable_cpu_data();void* mutable_gpu_data();
这里理解不是很明了,从功能上说,是返回cpu或gpu数据的指针,并设置数据状态为在cpu或gpu上。具体有什么显著的功效还没看出来。
SyncedHead head(); size_t size()
返回数据状态和大小。
最后一个
void async_gpu_push(const cudaStream_t& stream);
只有在没定义CPU_ONLY时才编译。感觉是同步用的,将cpu上的数据同步到gpu上。
3.关于DISABLE_COPY_AND_ASSIGN
在头文件中有这样一句
DISABLE_COPY_AND_ASSIGN(SyncedMemory);
这其实是一个宏,用来把该类的拷贝函数和等号操作符给禁止掉。
其实就是
private:\SyncedMemory( const SyncedMemory&);\SyncedMemory& operator =( const SyncedMemory&)
如果想让你的类不能使用 copy 构造函数和赋值操作符,只要将该类的 copy 构造函数和赋值操作符函数定义为 private 即可,并且只是声明,不用实现 .
- Caffe中SyncedMemory类阅读
- caffe代码阅读:SyncedMemory和Blob
- caffe源码阅读——SyncedMemory.cpp
- caffe源码分析--SyncedMemory类
- Caffe --- SyncedMemory
- caffe代码阅读9:SyncedMemory的实现细节-2016.3.28
- caffe代码阅读6:SyncedMemory的j介绍与实现
- caffe源码分析--SyncedMemory类代码研究
- caffe源码分析--SyncedMemory类代码研究
- caffe源码分析--SyncedMemory类代码研究
- 【Caffe代码解析】SyncedMemory
- caffe SyncedMemory 学习
- 【Caffe代码解析】SyncedMemory
- caffe源码:SyncedMemory
- caffe diff_->cpu_data()函数解读(涉及到SyncedMemory类)
- Blob和SyncedMemory代码阅读
- caffe源码解析 — SyncedMemory.cpp
- Caffe源码解读2 —— SyncedMemory
- 这些应用可以让你的kindle发挥到极致
- 从三无科学家之争想到的
- iOS拍照和视频录制
- android studio introduction No.1
- 秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
- Caffe中SyncedMemory类阅读
- Android studio introduction No.2 -- basic setting and build a helloword project
- Windows环境下Android Studio v1.0安装教程、百度云下载Android Studio
- Shodan完全手册部分翻译(2)
- C++ 之要点总结
- 不满与抱怨
- 【english】 你好,2016
- POJ-3984-迷宫问题
- [Demo][Add HTML+CSS+JQuery]