Arcane  v3.14.10.0
Documentation développeur
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/*---------------------------------------------------------------------------*/
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/*---------------------------------------------------------------------------*/
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
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 }
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 }
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 }
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
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 }
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
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 }
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
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 }
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
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/*---------------------------------------------------------------------------*/
152template <typename DataType, typename Extents, typename LayoutPolicy> auto
158
159/*---------------------------------------------------------------------------*/
160/*---------------------------------------------------------------------------*/
161
165template <typename DataType, typename Extents, typename LayoutPolicy> auto
171
172/*----------------------------------------------1-----------------------------*/
173/*---------------------------------------------------------------------------*/
177template <typename DataType, typename Extents, typename LayoutType> auto
179{
180 using Accessor = DataViewGetter<DataType>;
181 return NumArrayView<Accessor, Extents, LayoutType>(command, v.constMDSpan());
182}
183
184/*---------------------------------------------------------------------------*/
185/*---------------------------------------------------------------------------*/
186
188template <typename DataType, typename Extents, typename LayoutType = DefaultLayout>
190
192template <typename DataType, typename Extents, typename LayoutType = DefaultLayout>
194
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 ARCCORE_HOST_DEVICE AccessorReturnType operator()(Int32 i, Int32 j, Int32 k, Int32 l) const
Accesseur pour un tableau de rang 4.
constexpr ARCCORE_HOST_DEVICE Span< DataType > to1DSpan() const
Converti en une vue 1D.
constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(ArrayIndex< 4 > idx) const
Accesseur pour un tableau de rang 4.
constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(ArrayIndex< 1 > idx) const
Accesseur pour un tableau de rang 1.
constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(Int32 i) const
Accesseur pour un tableau de rang 1.
constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator[](Int32 i) const
Accesseur pour un tableau de rang 1.
constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(Int32 i, Int32 j, Int32 k) const
Accesseur pour un tableau de rang 3.
constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(ArrayIndex< 2 > idx) const
Accesseur pour un tableau de rang 2.
constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator[](ArrayIndex< 1 > idx) const
Accesseur pour un tableau de rang 1.
constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(ArrayIndex< 3 > idx) const
Accesseur pour un tableau de rang 3.
constexpr ARCCORE_HOST_DEVICE AccessorReturnType operator()(Int32 i, Int32 j) const
Accesseur pour un tableau de rang 2.
Informations pour construire une vue pour les données sur accélérateur.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
constexpr ARCCORE_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
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.
auto viewIn(RunCommand &cmd, const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture pour les variables materiaux scalaire.
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