lamppp
Loading...
Searching...
No Matches
storage.hpp
1#pragma once
2
3#include <cstdlib>
4#include <cstring>
5#include <memory>
6#include <ostream>
7#include "data_ptr.hpp"
8#include "lamppp/tensor/device_type.hpp"
9#include "lamppp/tensor/native/memory_ops.hpp"
10
11namespace lmp::tensor {
12
14
34class Storage {
35 public:
36 explicit Storage(size_t byte_size, DeviceType device)
37 : impl_(std::make_shared<StorageImpl>(byte_size, device)) {}
38
39 void* data() const noexcept;
40 size_t byte_size() const noexcept;
41 DeviceType device() const noexcept;
42
43 void resize(size_t nsize);
44 friend std::ostream& operator<<(std::ostream& os, const Storage& obj);
45
46 private:
47 class StorageImpl;
48 std::shared_ptr<StorageImpl> impl_;
49};
50
52 public:
53 explicit StorageImpl(size_t byte_size, DeviceType device)
54 : data_ptr_(ops::empty_stub()(device, byte_size)),
55 byte_size_(byte_size),
56 device_(device) {}
57
58 void* data() const noexcept;
59 size_t byte_size() const noexcept;
60 DeviceType device() const noexcept;
61
62 void resize(size_t nsize);
63 void print(std::ostream& os) const;
64
65 private:
66 detail::DataPtr data_ptr_;
67 size_t byte_size_;
68 DeviceType device_;
69};
71
72} // namespace lmp::tensor
Definition storage.hpp:51
Low-level data manager for Tensor and TensorImpl.
Definition storage.hpp:34
Smart pointer wrapper for tensor data with custom deleter support.
Definition data_ptr.hpp:22