MUDA
Loading...
Searching...
No Matches
field_entry_view.h
1#pragma once
2#include <muda/tools/string_pointer.h>
3#include <muda/view/view_base.h>
4#include <muda/ext/field/field_entry_layout.h>
5#include <muda/ext/field/field_entry_base_data.h>
6#include <muda/ext/field/matrix_map_info.h>
7#include <muda/ext/field/field_entry_core.h>
9#include <muda/ext/field/field_entry_viewer.h>
10#include <muda/tools/host_device_config.h>
11
12namespace muda
13{
14template <bool IsConst, typename T, FieldEntryLayout Layout, int M, int N>
15class FieldEntryViewCore : public ViewBase<IsConst>
16{
17 using Base = ViewBase<IsConst>;
19 friend class FieldEntryLaunch;
20
21 public:
22 template <typename U>
23 using auto_const_t = typename Base::template auto_const_t<U>;
24
27 using ThisViewer = std::conditional_t<IsConst, ConstViewer, NonConstViewer>;
28
29 using MatStride = typename ViewerCore::MatStride;
30 using ConstMatMap = typename ViewerCore::ConstMatMap;
31 using NonConstMatMap = typename ViewerCore::NonConstMatMap;
32 using ThisMatMap = typename ViewerCore::ThisMatMap;
33
34 protected:
36 MatStride m_stride;
37 int m_offset = 0;
38 int m_size = 0;
39
40
41 MUDA_GENERIC T* data(int i) const
42 {
43 return m_core->template data<T, Layout>(m_offset + i);
44 }
45
46 MUDA_GENERIC T* data(int i, int j) const
47 {
48
49 return m_core->template data<T, Layout>(m_offset + i, j);
50 }
51
52 MUDA_GENERIC T* data(int i, int row_index, int col_index) const
53 {
54 return m_core->template data<T, Layout>(m_offset + i, row_index, col_index);
55 }
56
57 protected:
59 {
60 };
61
62 MUDA_GENERIC FieldEntryViewCore(HostDeviceConfigView<FieldEntryCore> core, int offset, int size, AsIterator)
63 : m_core{core}
64 , m_offset{offset}
65 , m_size{size}
66 {
67 m_stride = details::field::make_stride<T, Layout, M, N>(*m_core);
68 }
69
70 public:
71 MUDA_GENERIC FieldEntryViewCore() = default;
72 MUDA_GENERIC FieldEntryViewCore(HostDeviceConfigView<FieldEntryCore> core, int offset, int size)
73 : FieldEntryViewCore(core, offset, size, AsIterator{})
74 {
75 MUDA_KERNEL_ASSERT(offset >= 0 && size >= 0 && offset + size <= core->count(),
76 "(offset,size) is out of range, offset=%d, size=%d, count=%d",
77 offset,
78 size,
79 core->count());
80 }
81
82 MUDA_GENERIC auto layout_info() const { return m_core->layout_info(); }
83 MUDA_GENERIC auto layout() const { return layout_info().layout(); }
84 MUDA_GENERIC auto offset() const { return m_offset; }
85 MUDA_GENERIC auto size() const { return m_size; }
86 MUDA_GENERIC auto total_count() const { return m_core->count(); }
87 MUDA_GENERIC auto elem_byte_size() const
88 {
89 return m_core->elem_byte_size();
90 }
91 MUDA_GENERIC auto shape() const { return m_core->shape(); }
92 MUDA_GENERIC auto struct_stride() const { return m_core->struct_stride(); }
93
94 MUDA_GENERIC auto name() const { return m_core->name(); }
95 MUDA_GENERIC auto viewer() { return ThisViewer{m_core, offset(), size()}; }
96 MUDA_GENERIC auto cviewer() const
97 {
98 return ConstViewer{m_core, offset(), size()};
99 }
100};
101} // namespace muda
102
103namespace muda
104{
105// forward declaration
106template <bool IsConst, typename T, FieldEntryLayout Layout, int M, int N>
107class FieldEntryViewBase;
108template <typename T, FieldEntryLayout Layout, int M, int N>
109class FieldEntryView;
110template <typename T, FieldEntryLayout Layout, int M, int N>
111class CFieldEntryView;
112} // namespace muda
113
114// implementation
115#include "details/entry_view/field_entry_view_matrix.inl"
116#include "details/entry_view/field_entry_view_vector.inl"
117#include "details/entry_view/field_entry_view_scalar.inl"
118
119namespace muda
120{
121template <typename T, FieldEntryLayout Layout, int M, int N>
122struct read_only_viewer<FieldEntryView<T, Layout, M, N>>
123{
125};
126
127template <typename T, FieldEntryLayout Layout, int M, int N>
128struct read_write_viewer<CFieldEntryView<T, Layout, M, N>>
129{
131};
132} // namespace muda
A view interface for any array-like liner memory, which can be constructed from DeviceBuffer/DeviceVe...
Definition field_entry_view_matrix.inl:110
Definition field_entry_viewer_matrix.inl:52
Definition field_entry_launch.h:9
Definition field_entry_view.h:16
Definition field_entry_view_matrix.inl:154
Definition field_entry_viewer.h:42
Definition field_entry_viewer_matrix.inl:77
Definition host_device_config.h:12
Definition view_base.h:8
Definition field_entry_view.h:59
Definition type_modifier.h:22
Definition type_modifier.h:28