Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
NumArrayViews.h
Aller à la documentation de ce fichier.
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* NumArrayViews.h (C) 2000-2024 */
9/* */
10/* Gestion des vues pour les 'NumArray' pour les accélérateurs. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_NUMARRAYVIEWS_H
13#define ARCANE_ACCELERATOR_NUMARRAYVIEWS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/NumArray.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane::Accelerator
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29template <typename DataType, typename Extents, typename LayoutPolicy>
31template <typename Accessor, typename Extents, typename LayoutPolicy>
32class NumArrayView;
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36/*!
37 * \brief Classe de base des vues sur les 'NumArray'.
38 */
39class ARCANE_ACCELERATOR_EXPORT NumArrayViewBase
40{
41 protected:
42
43 // Pour l'instant n'utilise pas encore \a command
44 // mais il ne faut pas le supprimer
46};
47
48/*---------------------------------------------------------------------------*/
49/*---------------------------------------------------------------------------*/
50/*!
51 * \brief Vue en lecture, écriture ou lecture/écriture sur un 'NumArray'.
52 *
53 * Les vues fonctionnent jusqu'à des tableaux de rang 4.
54 */
55template <typename Accessor, typename Extents, typename LayoutType>
57: public NumArrayViewBase
58{
59 public:
60
61 using DataType = typename Accessor::ValueType;
63 using AccessorReturnType = typename Accessor::AccessorReturnType;
64
65 public:
66
67 NumArrayView(const ViewBuildInfo& command, SpanType v)
68 : NumArrayViewBase(command, Arccore::asBytes(v.to1DSpan()))
69 , m_values(v)
70 {}
71
72 //! Accesseur pour un tableau de rang 1
73 template <typename X = Extents, typename = std::enable_if_t<X::rank() == 1, void>>
74 constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(Int32 i) const
75 {
76 return Accessor::build(m_values.ptrAt(i));
77 }
78 //! Accesseur pour un tableau de rang 1
79 template <typename X = Extents, typename = std::enable_if_t<X::rank() == 1, void>>
80 constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(ArrayIndex<1> idx) const
81 {
82 return Accessor::build(m_values.ptrAt(idx));
83 }
84 //! Accesseur pour un tableau de rang 1
85 template <typename X = Extents, typename = std::enable_if_t<X::rank() == 1, void>>
86 constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator[](Int32 i) const
87 {
88 return Accessor::build(m_values.ptrAt(i));
89 }
90 //! Accesseur pour un tableau de rang 1
91 template <typename X = Extents, typename = std::enable_if_t<X::rank() == 1, void>>
92 constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator[](ArrayIndex<1> idx) const
93 {
94 return Accessor::build(m_values.ptrAt(idx));
95 }
96
97 //! Accesseur pour un tableau de rang 2
98 template <typename X = Extents, typename = std::enable_if_t<X::rank() == 2, void>>
99 constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(Int32 i, Int32 j) const
100 {
101 return Accessor::build(m_values.ptrAt(i, j));
102 }
103 //! Accesseur pour un tableau de rang 2
104 template <typename X = Extents, typename = std::enable_if_t<X::rank() == 2, void>>
105 constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(ArrayIndex<2> idx) const
106 {
107 return Accessor::build(m_values.ptrAt(idx));
108 }
109
110 //! Accesseur pour un tableau de rang 3
111 template <typename X = Extents, typename = std::enable_if_t<X::rank() == 3, void>>
112 constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(Int32 i, Int32 j, Int32 k) const
113 {
114 return Accessor::build(m_values.ptrAt(i, j, k));
115 }
116 //! Accesseur pour un tableau de rang 3
117 template <typename X = Extents, typename = std::enable_if_t<X::rank() == 3, void>>
118 constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(ArrayIndex<3> idx) const
119 {
120 return Accessor::build(m_values.ptrAt(idx));
121 }
122
123 //! Accesseur pour un tableau de rang 4
124 template <typename X = Extents, typename = std::enable_if_t<X::rank() == 4, void>>
125 constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(Int32 i, Int32 j, Int32 k, Int32 l) const
126 {
127 return Accessor::build(m_values.ptrAt(i, j, k, l));
128 }
129 //! Accesseur pour un tableau de rang 4
130 template <typename X = Extents, typename = std::enable_if_t<X::rank() == 4, void>>
131 constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(ArrayIndex<4> idx) const
132 {
133 return Accessor::build(m_values.ptrAt(idx));
134 }
135
136 //! Converti en une vue 1D.
137 constexpr ARCCORE_HOST_DEVICE Span<DataType> to1DSpan() const
138 {
139 return m_values.to1DSpan();
140 }
141
142 private:
143
144 SpanType m_values;
145};
146
147/*---------------------------------------------------------------------------*/
148/*---------------------------------------------------------------------------*/
149/*!
150 * \brief Vue en écriture.
151 */
152template <typename DataType, typename Extents, typename LayoutPolicy> auto
154{
155 using Accessor = DataViewSetter<DataType>;
157}
158
159/*---------------------------------------------------------------------------*/
160/*---------------------------------------------------------------------------*/
161
162/*!
163 * \brief Vue en lecture/écriture.
164 */
165template <typename DataType, typename Extents, typename LayoutPolicy> auto
171
172/*----------------------------------------------1-----------------------------*/
173/*---------------------------------------------------------------------------*/
174/*!
175 * \brief Vue en lecture.
176 */
177template <typename DataType, typename Extents, typename LayoutType> auto
179{
180 using Accessor = DataViewGetter<DataType>;
182}
183
184/*---------------------------------------------------------------------------*/
185/*---------------------------------------------------------------------------*/
186
187//! Vue en entrée sur un NumArray
188template <typename DataType, typename Extents, typename LayoutType = DefaultLayout>
190
191//! Vue en sortie sur un NumArray
192template <typename DataType, typename Extents, typename LayoutType = DefaultLayout>
194
195//! Vue en entrée/sortie sur un NumArray
196template <typename DataType, typename Extents, typename LayoutType = DefaultLayout>
198
199/*---------------------------------------------------------------------------*/
200/*---------------------------------------------------------------------------*/
201
202} // End namespace Arcane::Accelerator
203
204/*---------------------------------------------------------------------------*/
205/*---------------------------------------------------------------------------*/
206
207#endif
Classe de base des vues sur les 'NumArray'.
Vue en lecture, écriture ou lecture/écriture sur un 'NumArray'.
constexpr __host__ __device__ AccessorReturnType operator()(Int32 i) const
Accesseur pour un tableau de rang 1.
constexpr __host__ __device__ AccessorReturnType operator[](Int32 i) const
Accesseur pour un tableau de rang 1.
constexpr __host__ __device__ AccessorReturnType operator()(Int32 i, Int32 j, Int32 k, Int32 l) const
Accesseur pour un tableau de rang 4.
constexpr __host__ __device__ AccessorReturnType operator()(ArrayIndex< 2 > idx) const
Accesseur pour un tableau de rang 2.
constexpr __host__ __device__ AccessorReturnType operator[](ArrayIndex< 1 > idx) const
Accesseur pour un tableau de rang 1.
constexpr __host__ __device__ AccessorReturnType operator()(ArrayIndex< 4 > idx) const
Accesseur pour un tableau de rang 4.
constexpr __host__ __device__ AccessorReturnType operator()(ArrayIndex< 3 > idx) const
Accesseur pour un tableau de rang 3.
constexpr __host__ __device__ AccessorReturnType operator()(Int32 i, Int32 j, Int32 k) const
Accesseur pour un tableau de rang 3.
constexpr __host__ __device__ AccessorReturnType operator()(Int32 i, Int32 j) const
Accesseur pour un tableau de rang 2.
constexpr __host__ __device__ AccessorReturnType operator()(ArrayIndex< 1 > idx) const
Accesseur pour un tableau de rang 1.
constexpr __host__ __device__ Span< DataType > to1DSpan() const
Converti en une vue 1D.
Informations pour construire une vue pour les données sur accélérateur.
Classe pour accéder à un élément d'une vue en lecture/écriture.
Definition DataView.h:245
constexpr __host__ __device__ DataType * ptrAt(Int32 i, Int32 j, Int32 k, Int32 l) const
Pointeur sur la valeur pour l'élément i,j,k.
Definition MDSpan.h:168
Tableaux multi-dimensionnels pour les types numériques accessibles sur accélérateurs.
MDSpanType mdspan()
Vue multi-dimension sur l'instance.
ConstMDSpanType constMDSpan() const
Vue constante multi-dimension sur l'instance.
Vue d'un tableau d'éléments de type T.
Definition Span.h:510
Espace de nom pour l'utilisation des accélérateurs.
auto viewInOut(RunCommand &cmd, CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture/écriture pour les variables materiaux scalaire.
NumArrayView< DataViewSetter< DataType >, Extents, LayoutType > NumArrayOutView
Vue en sortie sur un NumArray.
auto viewIn(RunCommand &cmd, const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture pour les variables materiaux scalaire.
NumArrayView< DataViewGetter< DataType >, Extents, LayoutType > NumArrayInView
Vue en entrée sur un NumArray.
NumArrayView< DataViewGetterSetter< DataType >, Extents, LayoutType > NumArrayInOutView
Vue en entrée/sortie sur un NumArray.
auto viewOut(RunCommand &cmd, CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture pour les variables materiaux scalaire.
detail::SpanTypeFromSize< conststd::byte, SizeType >::SpanType asBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets non modifiables.
Definition Span.h:881