1 #ifndef CAFFEINE_BLOB_HPP
2 #define CAFFEINE_BLOB_HPP
4 #include <memory>
6 #include "caffeine/common.hpp"
7 #include "caffeine/syncedmem.hpp"
9 namespace caffeine {
11 template <typename Dtype>
12 class Blob {
13 public:
14 Blob()
15 : num_(0), channels_(0), height_(0), width_(0), count_(0), data_(),
16 diff_() {};
17 explicit Blob(const int num, const int channels, const int height,
18 const int width) {
19 Reshape(num, channels, height, width);
20 };
21 ~Blob() {};
22 void Reshape(const int num, const int channels, const int height,
23 const int width);
24 inline int num() { return num_; }
25 inline int channels() { return channels_; }
26 inline int height() { return height_; }
27 inline int width() { return width_; }
29 const Dtype* cpu_data();
30 const Dtype* gpu_data();
31 const Dtype* cpu_diff();
32 const Dtype* gpu_diff();
33 Dtype* mutable_cpu_data();
34 Dtype* mutable_gpu_data();
35 Dtype* mutable_cpu_diff();
36 Dtype* mutable_gpu_diff();
37 private:
38 void check_data();
39 void check_diff();
40 shared_ptr<SyncedMemory> data_;
41 shared_ptr<SyncedMemory> diff_;
42 int num_;
43 int channels_;
44 int height_;
45 int width_;
46 int count_;
47 }; // class Blob
49 } // namespace caffeine
51 #endif // CAFFEINE_BLOB_HPP_