Caffe源码分析随笔(二)——Blob

Blob是caffe中每一层的基本类型。
查看头文件:

template <typename Dtype>
class Blob {public:Blob(): data_(), diff_(), count_(0), capacity_(0) {}...protected:shared_ptr data_;shared_ptr diff_;shared_ptr shape_data_;vector<int> shape_;int count_;int capacity_;

Blob类和caffe中大多类一样是模板函数, 其实Dtype在caffe中一般是float 或 double类型。 一般可以不用管它是float或是double类型,但我遇到过Dtype类型不匹配的情况,这个时候我目前只发现使用Dtype类型强制转换,将其他类型转为Dtype。

看Blob类下的几个变量。data_显然是这一层的数值张量(the data of this layer), diff_显然是相应的微分值。 至于shape_data_shape_ 应该都是layer的shape,一般是四维的。count_ 是这一层data总数, count_ = width*height*channel*num , capacity_则是当前申请的空间容纳的data数。

SyncedMemory 是caffe的一个基本类型,如上面代码:data,diff 都是SyncedMemory类型。

class SyncedMemory {private:void to_cpu();void to_gpu();void* cpu_ptr_;void* gpu_ptr_;size_t size_;SyncedHead head_;bool own_cpu_data_;bool cpu_malloc_use_cuda_;bool own_gpu_data_;int gpu_device_;
}

SyncedMemory类主要干的是 分配cpu数据, gpu数据, 数据从cpu传到gpu, 从gpu传到cpu之类的。注意到有void指针, void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部