1 #ifndef CAFFEINE_SYNCEDMEM_HPP
2 #define CAFFEINE_SYNCEDMEM_HPP
4 namespace caffeine {
6 class SyncedMemory {
7 public:
8 SyncedMemory()
9 : cpu_ptr_(NULL), gpu_ptr_(NULL), size_(0), head_(SYNCED) {};
10 explicit SyncedMemory(size_t size)
11 : cpu_ptr_(NULL), gpu_ptr_(NULL), head_(SYNCED), size_(size) {};
12 ~SyncedMemory();
13 const void* cpu_data();
14 const void* gpu_data();
15 void* mutable_cpu_data();
16 void* mutable_gpu_data();
17 private:
18 void to_cpu();
19 void to_gpu();
20 void* cpu_ptr_;
21 void* gpu_ptr_;
22 size_t size_;
23 enum SyncedHead { UNINITIALIZED, HEAD_AT_CPU, HEAD_AT_GPU, SYNCED };
24 SyncedHead head_;
25 }; // class SyncedMemory
27 } // namespace caffeine
29 #endif // CAFFEINE_SYNCEDMEM_HPP_