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