muda
buffer_launch.h
1 #pragma once
2 #include <muda/launch/launch_base.h>
3 #include <muda/muda_config.h>
4 #include <muda/tools/extent.h>
5 
6 namespace muda
7 {
8 template <typename T>
9 class DeviceVar;
10 template <typename T>
11 class DeviceBuffer;
12 template <typename T>
13 class DeviceBuffer2D;
14 template <typename T>
15 class DeviceBuffer3D;
16 
17 template <typename T>
18 class VarView;
19 template <typename T>
20 class CVarView;
21 template <typename T>
22 class BufferView;
23 template <typename T>
24 class CBufferView;
25 template <typename T>
26 class Buffer2DView;
27 template <typename T>
28 class CBuffer2DView;
29 template <typename T>
30 class Buffer3DView;
31 template <typename T>
32 class CBuffer3DView;
33 template <typename T>
35 
36 class BufferLaunch : public LaunchBase<BufferLaunch>
37 {
38  int m_grid_dim = 0;
39  int m_block_dim = -1; // we use automatic block dim choose as default.
40 
41  public:
42  // default config
43  MUDA_HOST BufferLaunch(cudaStream_t s = nullptr) MUDA_NOEXCEPT : LaunchBase(s)
44  {
45  }
46 
47  MUDA_HOST BufferLaunch(int block_dim, cudaStream_t s = nullptr) MUDA_NOEXCEPT
48  : LaunchBase(s),
49  m_block_dim(block_dim)
50  {
51  }
52 
53  MUDA_HOST BufferLaunch(int grid_dim, int block_dim, cudaStream_t s = nullptr) MUDA_NOEXCEPT
54  : LaunchBase(s),
55  m_grid_dim(grid_dim),
56  m_block_dim(block_dim)
57  {
58  }
59 
60  /**********************************************************************************************
61  *
62  * Buffer API
63  * 0D DeviceVar
64  * 1D DeviceBuffer
65  * 2D DeviceBuffer2D
66  * 3D DeviceBuffer3D
67  *
68  ***********************************************************************************************/
69  template <typename T>
70  MUDA_HOST BufferLaunch& resize(DeviceBuffer<T>& buffer, size_t size);
71  template <typename T>
72  MUDA_HOST BufferLaunch& resize(DeviceBuffer2D<T>& buffer, Extent2D extent);
73  template <typename T>
74  MUDA_HOST BufferLaunch& resize(DeviceBuffer3D<T>& buffer, Extent3D extent);
75 
76  template <typename T>
77  MUDA_HOST BufferLaunch& reserve(DeviceBuffer<T>& buffer, size_t capacity);
78  template <typename T>
79  MUDA_HOST BufferLaunch& reserve(DeviceBuffer2D<T>& buffer, Extent2D capacity);
80  template <typename T>
81  MUDA_HOST BufferLaunch& reserve(DeviceBuffer3D<T>& buffer, Extent3D capacity);
82 
83 
84  template <typename T>
85  MUDA_HOST BufferLaunch& resize(DeviceBuffer<T>& buffer, size_t size, const T& val);
86  template <typename T>
87  MUDA_HOST BufferLaunch& resize(DeviceBuffer2D<T>& buffer, Extent2D extent, const T& val);
88  template <typename T>
89  MUDA_HOST BufferLaunch& resize(DeviceBuffer3D<T>& buffer, Extent3D extent, const T& val);
90 
91 
92  template <typename T>
93  MUDA_HOST BufferLaunch& clear(DeviceBuffer<T>& buffer);
94  template <typename T>
95  MUDA_HOST BufferLaunch& clear(DeviceBuffer2D<T>& buffer);
96  template <typename T>
97  MUDA_HOST BufferLaunch& clear(DeviceBuffer3D<T>& buffer);
98 
99 
100  template <typename T>
101  MUDA_HOST BufferLaunch& alloc(DeviceBuffer<T>& buffer, size_t n);
102  template <typename T>
103  MUDA_HOST BufferLaunch& alloc(DeviceBuffer2D<T>& buffer, Extent2D extent);
104  template <typename T>
105  MUDA_HOST BufferLaunch& alloc(DeviceBuffer3D<T>& buffer, Extent3D extent);
106 
107 
108  template <typename T>
109  MUDA_HOST BufferLaunch& free(DeviceBuffer<T>& buffer);
110  template <typename T>
111  MUDA_HOST BufferLaunch& free(DeviceBuffer2D<T>& buffer);
112  template <typename T>
113  MUDA_HOST BufferLaunch& free(DeviceBuffer3D<T>& buffer);
114 
115 
116  template <typename T>
117  MUDA_HOST BufferLaunch& shrink_to_fit(DeviceBuffer<T>& buffer);
118  template <typename T>
119  MUDA_HOST BufferLaunch& shrink_to_fit(DeviceBuffer2D<T>& buffer);
120  template <typename T>
121  MUDA_HOST BufferLaunch& shrink_to_fit(DeviceBuffer3D<T>& buffer);
122 
123  /**********************************************************************************************
124  *
125  * BufferView Copy: Device <- Device
126  *
127  **********************************************************************************************/
128  template <typename T>
129  MUDA_HOST BufferLaunch& copy(VarView<T> dst, CVarView<T> src);
130  template <typename T>
131  MUDA_HOST BufferLaunch& copy(BufferView<T> dst, CBufferView<T> src);
132  template <typename T>
133  MUDA_HOST BufferLaunch& copy(Buffer2DView<T> dst, CBuffer2DView<T> src);
134  template <typename T>
135  MUDA_HOST BufferLaunch& copy(Buffer3DView<T> dst, CBuffer3DView<T> src);
136 
137  template <typename T>
138  MUDA_HOST BufferLaunch& copy(VarView<T> dst, VarView<T> src);
139  template <typename T>
140  MUDA_HOST BufferLaunch& copy(BufferView<T> dst, BufferView<T> src);
141  template <typename T>
142  MUDA_HOST BufferLaunch& copy(Buffer2DView<T> dst, Buffer2DView<T> src);
143  template <typename T>
144  MUDA_HOST BufferLaunch& copy(Buffer3DView<T> dst, Buffer3DView<T> src);
145 
146  template <typename T>
147  MUDA_HOST BufferLaunch& copy(ComputeGraphVar<VarView<T>>& dst,
148  const ComputeGraphVar<VarView<T>>& src);
149  template <typename T>
150  MUDA_HOST BufferLaunch& copy(ComputeGraphVar<BufferView<T>>& dst,
151  const ComputeGraphVar<BufferView<T>>& src);
152  template <typename T>
153  MUDA_HOST BufferLaunch& copy(ComputeGraphVar<Buffer2DView<T>>& dst,
154  const ComputeGraphVar<Buffer2DView<T>>& src);
155  template <typename T>
156  MUDA_HOST BufferLaunch& copy(ComputeGraphVar<Buffer3DView<T>>& dst,
157  const ComputeGraphVar<Buffer3DView<T>>& src);
158 
159  /**********************************************************************************************
160  *
161  * BufferView Copy: Host <- Device
162  *
163  **********************************************************************************************/
164  template <typename T>
165  MUDA_HOST BufferLaunch& copy(T* dst, CVarView<T> src);
166  template <typename T>
167  MUDA_HOST BufferLaunch& copy(T* dst, CBufferView<T> src);
168  template <typename T>
169  MUDA_HOST BufferLaunch& copy(T* dst, CBuffer2DView<T> src);
170  template <typename T>
171  MUDA_HOST BufferLaunch& copy(T* dst, CBuffer3DView<T> src);
172 
173  template <typename T>
174  MUDA_HOST BufferLaunch& copy(T* dst, VarView<T> src);
175  template <typename T>
176  MUDA_HOST BufferLaunch& copy(T* dst, BufferView<T> src);
177  template <typename T>
178  MUDA_HOST BufferLaunch& copy(T* dst, Buffer2DView<T> src);
179  template <typename T>
180  MUDA_HOST BufferLaunch& copy(T* dst, Buffer3DView<T> src);
181 
182  template <typename T>
183  MUDA_HOST BufferLaunch& copy(ComputeGraphVar<T*>& dst,
184  const ComputeGraphVar<BufferView<T>>& src);
185  template <typename T>
186  MUDA_HOST BufferLaunch& copy(ComputeGraphVar<T*>& dst,
187  const ComputeGraphVar<Buffer2DView<T>>& src);
188  template <typename T>
189  MUDA_HOST BufferLaunch& copy(ComputeGraphVar<T*>& dst,
190  const ComputeGraphVar<VarView<T>>& src);
191  template <typename T>
192  MUDA_HOST BufferLaunch& copy(ComputeGraphVar<T*>& dst,
193  const ComputeGraphVar<Buffer3DView<T>>& src);
194 
195  /**********************************************************************************************
196  *
197  * BufferView Copy: Device <- Host
198  *
199  **********************************************************************************************/
200  template <typename T>
201  MUDA_HOST BufferLaunch& copy(VarView<T> dst, const T* src);
202  template <typename T>
203  MUDA_HOST BufferLaunch& copy(BufferView<T> dst, const T* src);
204  template <typename T>
205  MUDA_HOST BufferLaunch& copy(Buffer2DView<T> dst, const T* src);
206  template <typename T>
207  MUDA_HOST BufferLaunch& copy(Buffer3DView<T> dst, const T* src);
208 
209  template <typename T>
210  MUDA_HOST BufferLaunch& copy(ComputeGraphVar<BufferView<T>>& dst,
211  const ComputeGraphVar<T*>& src);
212  template <typename T>
213  MUDA_HOST BufferLaunch& copy(ComputeGraphVar<Buffer2DView<T>>& dst,
214  const ComputeGraphVar<T*>& src);
215  template <typename T>
216  MUDA_HOST BufferLaunch& copy(ComputeGraphVar<VarView<T>>& dst,
217  const ComputeGraphVar<T*>& src);
218  template <typename T>
219  MUDA_HOST BufferLaunch& copy(ComputeGraphVar<Buffer3DView<T>>& dst,
220  const ComputeGraphVar<T*>& src);
221 
222  /**********************************************************************************************
223  *
224  * BufferView Scatter: Device <- Host
225  *
226  **********************************************************************************************/
227  template <typename T>
228  MUDA_HOST BufferLaunch& fill(VarView<T> buffer, const T& val);
229  template <typename T>
230  MUDA_HOST BufferLaunch& fill(BufferView<T> buffer, const T& val);
231  template <typename T>
232  MUDA_HOST BufferLaunch& fill(Buffer2DView<T> buffer, const T& val);
233  template <typename T>
234  MUDA_HOST BufferLaunch& fill(Buffer3DView<T> buffer, const T& val);
235 
236  template <typename T>
237  MUDA_HOST BufferLaunch& fill(ComputeGraphVar<VarView<T>>& buffer,
238  const ComputeGraphVar<T>& val);
239  template <typename T>
240  MUDA_HOST BufferLaunch& fill(ComputeGraphVar<BufferView<T>>& buffer,
241  const ComputeGraphVar<T>& val);
242  template <typename T>
243  MUDA_HOST BufferLaunch& fill(ComputeGraphVar<Buffer2DView<T>>& buffer,
244  const ComputeGraphVar<T>& val);
245  template <typename T>
246  MUDA_HOST BufferLaunch& fill(ComputeGraphVar<Buffer3DView<T>>& buffer,
247  const ComputeGraphVar<T>& val);
248 
249  private:
250  template <typename T, typename FConstruct>
251  MUDA_HOST BufferLaunch& resize(DeviceBuffer<T>& buffer, size_t new_size, FConstruct&& fct);
252 
253  template <typename T, typename FConstruct>
254  MUDA_HOST BufferLaunch& resize(DeviceBuffer2D<T>& buffer, Extent2D new_extent, FConstruct&& fct);
255 
256  template <typename T, typename FConstruct>
257  MUDA_HOST BufferLaunch& resize(DeviceBuffer3D<T>& buffer, Extent3D new_extent, FConstruct&& fct);
258 };
259 } // namespace muda
260 
261 #include "details/buffer_launch.inl"
Definition: extent.h:39
A std::vector like wrapper of cuda device memory, allows user to:
Definition: buffer_fwd.h:33
Definition: buffer_fwd.h:9
Definition: buffer_fwd.h:39
Definition: buffer_3d_view.h:119
Definition: buffer_launch.h:34
Definition: buffer_fwd.h:12
Definition: extent.h:9
Definition: assert.h:13
Definition: buffer_fwd.h:6
Definition: buffer_3d_view.h:142
Definition: launch_base.h:85
Definition: buffer_fwd.h:36
Definition: buffer_2d_view.h:115
Definition: buffer_launch.h:36
Definition: buffer_fwd.h:15
Definition: buffer_2d_view.h:135