MUDA
Loading...
Searching...
No Matches
reserve.h
1#pragma once
2#include <muda/launch/memory.h>
4#include <muda/buffer/buffer_2d_view.h>
5#include <muda/buffer/buffer_3d_view.h>
6
7namespace muda::details::buffer
8{
9template <typename T>
10MUDA_INLINE MUDA_HOST BufferView<T> reserve_1d(cudaStream_t stream, size_t size)
11{
12 T* ptr = nullptr;
13 Memory(stream).alloc_1d(&ptr, size * sizeof(T));
14 return BufferView<T>{ptr, 0, size};
15}
16
17template <typename T>
18MUDA_INLINE MUDA_HOST Buffer2DView<T> reserve_2d(cudaStream_t stream, Extent2D extent)
19{
20 T* ptr = nullptr;
21 size_t pitch_bytes = 0;
22 Memory(stream).alloc_2d(
23 &ptr, &pitch_bytes, extent.width() * sizeof(T), extent.height());
24 return Buffer2DView<T>{ptr, pitch_bytes, Offset2D::Zero(), extent};
25}
26
27template <typename T>
28MUDA_INLINE MUDA_HOST Buffer3DView<T> reserve_3d(cudaStream_t stream, Extent3D extent)
29{
30 cudaPitchedPtr pitched_ptr;
31 Memory(stream).alloc_3d(&pitched_ptr, extent.template cuda_extent<T>());
32 T* ptr = reinterpret_cast<T*>(pitched_ptr.ptr);
33 size_t pitch_bytes = pitched_ptr.pitch;
34 size_t pitch_bytes_area = pitched_ptr.pitch * extent.height();
35 return Buffer3DView<T>{ptr, pitch_bytes, pitch_bytes_area, Offset3D::Zero(), extent};
36}
37} // namespace muda::details::buffer
A view interface for any array-like liner memory, which can be constructed from DeviceBuffer/DeviceVe...