1 #ifndef DASH__MATRIX__MATRIX_REF_H__ 2 #define DASH__MATRIX__MATRIX_REF_H__ 4 #include <dash/Matrix.h> 9 #include <dash/Pattern.h> 10 #include <dash/GlobRef.h> 11 #include <dash/HView.h> 13 #include <dash/view/Sub.h> 15 #include <dash/iterator/GlobIter.h> 16 #include <dash/iterator/GlobViewIter.h> 67 typedef MatrixRef<ElementT, NumDimensions, NumViewDim, PatternT, LocalMemT>
71 typedef typename PatternT::index_type
73 typedef typename PatternT::size_type
75 typedef MatrixRefView<ElementT, NumDimensions, PatternT, LocalMemT>
77 typedef CartesianIndexSpace<
79 PatternT::memory_order(),
80 typename PatternT::index_type >
82 typedef std::array<typename PatternT::size_type, NumDimensions>
84 typedef std::array<typename PatternT::index_type, NumDimensions>
87 typedef Matrix<ElementT, NumDimensions, Index_t, PatternT, LocalMemT>
matrix_t;
91 typedef PatternT pattern_type;
92 typedef typename PatternT::index_type index_type;
93 typedef ElementT value_type;
94 typedef IndexSpace_t index_space_type;
96 typedef typename PatternT::size_type size_type;
97 typedef typename PatternT::index_type difference_type;
99 typedef GlobViewIter<value_type, PatternT, GlobMem_t> iterator;
100 typedef GlobViewIter<const value_type, PatternT, GlobMem_t> const_iterator;
102 typedef std::reverse_iterator<iterator> reverse_iterator;
103 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
105 typedef GlobRef< value_type> reference;
106 typedef GlobRef<const value_type> const_reference;
108 typedef iterator pointer;
109 typedef const_iterator const_pointer;
111 typedef LocalMatrixRef<
112 ElementT, NumDimensions, NumDimensions, PatternT, LocalMemT>
114 typedef LocalMatrixRef<
115 const ElementT, NumDimensions, NumDimensions, PatternT, LocalMemT>
118 typedef LocalMatrixRef<
119 ElementT, NumDimensions, NumDimensions, PatternT, LocalMemT>
120 local_reference_type;
121 typedef LocalMatrixRef<
122 const ElementT, NumDimensions, NumDimensions, PatternT, LocalMemT>
123 const_local_reference_type;
128 dim_t NumDimensions_,
135 dim_t NumDimensions1,
136 dim_t NumDimensions2,
138 typename LocalMemT_ >
139 friend class MatrixRef;
142 dim_t NumDimensions1,
143 dim_t NumDimensions2,
145 typename LocalMemT_ >
146 friend class LocalMatrixRef;
149 MatrixRef<ElementT, NumDimensions, NumViewDim-1, PatternT, LocalMemT>();
152 typedef std::integral_constant<dim_t, NumViewDim>
160 MatrixRefView<ElementT, NumDimensions, PatternT, LocalMemT> _refview;
163 MatrixRef<ElementT, NumDimensions, NumViewDim, PatternT, LocalMemT>() =
167 MatrixRef<ElementT, NumDimensions, NumViewDim, PatternT, LocalMemT>(
168 const MatrixRef<T_, NumDimensions, NumViewDim + 1, PatternT, LocalMemT>&
173 MatrixRef<ElementT, NumDimensions, NumViewDim, PatternT, LocalMemT>(
174 const MatrixRef<T_, NumDimensions, NumViewDim, PatternT, LocalMemT> & other);
176 constexpr Team & team() const noexcept;
178 constexpr size_type
size() const noexcept;
179 constexpr size_type local_size() const noexcept;
180 constexpr size_type local_capacity() const noexcept;
181 constexpr size_type
extent(
dim_t dim) const noexcept;
182 constexpr Extents_t extents() const noexcept;
183 constexpr index_type offset(
dim_t dim) const noexcept;
184 constexpr Offsets_t offsets() const noexcept;
185 constexpr
bool empty() const noexcept;
193 constexpr const PatternT &
pattern() const noexcept;
195 constexpr const_pointer data() const noexcept;
196 pointer data() noexcept;
198 iterator
begin() noexcept;
199 constexpr const_iterator
begin() const noexcept;
201 iterator
end() noexcept;
202 constexpr const_iterator
end() const noexcept;
208 inline ElementT *
lbegin() noexcept;
210 constexpr const ElementT *
lbegin() const noexcept;
212 inline ElementT *
lend() noexcept;
214 constexpr const ElementT *
lend() const noexcept;
220 template <
dim_t __NumViewDim = NumViewDim - 1>
221 typename
std::enable_if<
223 MatrixRef<ElementT, NumDimensions, __NumViewDim, PatternT, LocalMemT>>::
225 operator[](size_type n);
231 template <
dim_t __NumViewDim = NumViewDim - 1>
232 typename
std::enable_if<
234 MatrixRef<const ElementT, NumDimensions, __NumViewDim, PatternT, LocalMemT>>::
236 constexpr operator[](size_type n) const;
242 template<
dim_t __NumViewDim = NumViewDim-1>
243 typename
std::enable_if<(__NumViewDim == 0), reference>::type
244 operator[](size_type n);
250 template<
dim_t __NumViewDim = NumViewDim-1>
251 typename
std::enable_if<(__NumViewDim == 0), const_reference>::type
252 operator[](size_type n) const;
254 template <
dim_t NumSubDimensions>
261 sub(size_type n) const;
263 template<
dim_t NumSubDimensions>
264 MatrixRef<ElementT, NumDimensions, NumDimensions-1, PatternT, LocalMemT>
267 MatrixRef<ElementT, NumDimensions, NumDimensions-1, PatternT, LocalMemT>
270 MatrixRef<ElementT, NumDimensions, NumDimensions-1, PatternT, LocalMemT>
273 template <
dim_t SubDimension>
274 MatrixRef<const ElementT, NumDimensions, NumDimensions, PatternT, LocalMemT>
275 sub(size_type n, size_type range) const;
277 template <
dim_t SubDimension>
278 MatrixRef<ElementT, NumDimensions, NumDimensions, PatternT, LocalMemT>
279 sub(size_type n, size_type range);
290 MatrixRef<ElementT, NumDimensions, NumDimensions, PatternT, LocalMemT>
306 MatrixRef<ElementT, NumDimensions, NumDimensions, PatternT, LocalMemT>
321 template<typename ... Args>
334 template<typename ... Args>
349 const ::
std::array<index_type, NumDimensions> & coords) const;
361 const ::
std::array<index_type, NumDimensions> & coords);
372 template<typename... Args>
373 reference operator()(
377 constexpr
bool is_local(index_type n) const;
379 template<
dim_t Dimension>
380 constexpr
bool is_local(index_type n) const;
382 constexpr const ViewSpec<NumDimensions, index_type> & viewspec()
const {
383 return _refview._viewspec;
393 #include <dash/matrix/internal/MatrixRef-inl.h> 395 #endif // DASH__MATRIX__MATRIX_REF_H__ constexpr dim_t rank(const DimensionalType &d)
local_type sub_local() noexcept
View representing elements in the active unit's local memory.
Defines how a list of global indices is mapped to single units within a Team.
size_t size()
Return the number of units in the global team.
constexpr auto end(RangeType &&range) -> decltype(std::forward< RangeType >(range).end())
This class is a simple memory pool which holds allocates elements of size ValueType.
constexpr auto begin(RangeType &&range) -> decltype(std::forward< RangeType >(range).begin())
int dim_t
Scalar type for a dimension value, with 0 indicating the first dimension.
reference at(Args... args)
Fortran-style subscript operator.
MatrixRef< ElementT, NumDimensions, NumDimensions, PatternT, LocalMemT > cols(size_type offset, size_type range)
Create a view representing the matrix slice within a column range.
constexpr const PatternT & pattern() const noexcept
The pattern used to distribute matrix elements to units in its associated team.
constexpr dim_t ndim(const DimensionalType &d)
ElementT * lbegin() noexcept
Pointer to first element in local range.
MatrixRef< ElementT, NumDimensions, NumDimensions, PatternT, LocalMemT > rows(size_type n, size_type range)
Create a view representing the matrix slice within a row range.
constexpr DimensionalType::extent_type extent(const DimensionalType &d)
void barrier()
A global barrier involving all units.
see https://en.cppreference.com/w/cpp/feature_test for recommended feature tests
constexpr ViewSubMod< ViewOrigin< NViewDim >, SubDim > sub(OffsetFirstT begin, OffsetFinalT end)
Sub-section, view dimensions maintain domain dimensions.
ElementT * lend() noexcept
Pointer past final element in local range.