MUDA
Loading...
Searching...
No Matches
buffer_view.h
Go to the documentation of this file.
1/*****************************************************************/
10#pragma once
11#include <cuda.h>
12#include <cuda_runtime.h>
13#include <cuda_runtime_api.h>
14#include <cinttypes>
15#include <muda/type_traits/type_modifier.h>
17#include <muda/buffer/buffer_fwd.h>
18#include <muda/view/view_base.h>
19
20namespace muda
21{
22template <bool IsConst, typename T>
23class BufferViewT : public ViewBase<IsConst>
24{
25 using Base = ViewBase<IsConst>;
26
27 template <bool OtherIsConst, typename U>
28 friend class BufferViewT;
29
30 public:
31 static_assert(!std::is_const_v<T>, "Ty must be non-const");
34
35 using CViewer = CDense1D<T>;
36 using Viewer = Dense1D<T>;
37 using ThisViewer = std::conditional_t<IsConst, CViewer, Viewer>;
38
39 template <typename U>
40 using auto_const_t = typename Base::template auto_const_t<U>;
41
42 protected:
43 auto_const_t<T>* m_data = nullptr;
44 size_t m_offset = ~0;
45 size_t m_size = ~0;
46
47 public:
48 MUDA_GENERIC BufferViewT() MUDA_NOEXCEPT = default;
49
50 MUDA_GENERIC BufferViewT(const BufferViewT& other) MUDA_NOEXCEPT = default;
51
52 MUDA_GENERIC BufferViewT(auto_const_t<T>* data, size_t offset, size_t size) MUDA_NOEXCEPT;
53
54 MUDA_GENERIC BufferViewT(auto_const_t<T>* data, size_t size) MUDA_NOEXCEPT;
55
56 template <bool OtherIsConst>
57 BufferViewT(const BufferViewT<OtherIsConst, T>& other) MUDA_NOEXCEPT
58 MUDA_REQUIRES(!OtherIsConst);
59
60 MUDA_GENERIC ConstView as_const() const MUDA_NOEXCEPT;
61
62 MUDA_GENERIC auto_const_t<T>* data() const MUDA_NOEXCEPT;
63
64 MUDA_GENERIC auto_const_t<T>* data(size_t i) const MUDA_NOEXCEPT;
65
66 MUDA_GENERIC auto_const_t<T>* origin_data() const MUDA_NOEXCEPT;
67
68 MUDA_GENERIC ThisView subview(size_t offset, size_t size = ~0) const MUDA_NOEXCEPT;
69
70 MUDA_GENERIC ThisViewer viewer() const MUDA_NOEXCEPT;
71
72 MUDA_GENERIC CViewer cviewer() const MUDA_NOEXCEPT;
73
74 MUDA_GENERIC size_t size() const MUDA_NOEXCEPT { return m_size; }
75
76 MUDA_GENERIC size_t offset() const MUDA_NOEXCEPT { return m_offset; }
77
78 MUDA_GENERIC auto_const_t<T>& operator[](size_t i) const MUDA_NOEXCEPT;
79
80 MUDA_HOST void copy_from(const BufferViewT<true, T>& other) const
81 MUDA_REQUIRES(!IsConst);
82
83 MUDA_HOST void fill(const T& value) const MUDA_REQUIRES(!IsConst);
84
85 MUDA_HOST void copy_from(const T* host) const MUDA_REQUIRES(!IsConst);
86
87 MUDA_HOST void copy_to(T* host) const;
88
89 /**********************************************************************************
90 * BufferView As Iterator
91 ***********************************************************************************/
92
93 // Random Access Iterator Interface
94 using value_type = T;
95 using reference = T&;
96 using pointer = T*;
97 using iterator_category = std::random_access_iterator_tag;
98 using difference_type = size_t;
99
100 MUDA_GENERIC ThisView operator+(int i) const MUDA_NOEXCEPT;
101 MUDA_GENERIC reference operator*() const MUDA_NOEXCEPT;
102 MUDA_GENERIC auto_const_t<T>& operator[](int i) const MUDA_NOEXCEPT;
103};
104
105template <typename T>
107
108template <typename T>
110
111template <typename T>
113{
114 using type = CBufferView<T>;
115};
116
117template <typename T>
119{
120 using type = BufferView<T>;
121};
122} // namespace muda
123
124#include "details/buffer_view.inl"
Definition buffer_view.h:24
Definition dense_1d.h:27
Definition view_base.h:8
A C/C++ array like viewer for kernel access, with safe checking on any input. You can index the eleme...
Definition type_modifier.h:22
Definition type_modifier.h:28