12#ifndef ARCANE_UTILS_NUMARRAY_H
13#define ARCANE_UTILS_NUMARRAY_H
17#include "arcane/utils/MDSpan.h"
18#include "arcane/utils/MDDim.h"
19#include "arcane/utils/NumArrayContainer.h"
20#include "arcane/utils/ArcaneCxx20.h"
21#include "arcane/utils/String.h"
49template <
typename DataType,
typename Extents,
typename LayoutPolicy>
55 using ExtentsType = Extents;
57 using DynamicDimsType =
typename ExtentsType::DynamicDimsType;
61 using ArrayBoundsIndexType =
typename MDSpanType::ArrayBoundsIndexType;
62 using value_type = DataType;
66 using SpanType ARCANE_DEPRECATED_REASON(
"Use 'MDSpanType' instead") =
MDSpanType;
71 static constexpr int rank() {
return Extents::rank(); }
126 NumArray(Int32 dim1_size, Int32 dim2_size)
requires(Extents::nb_dynamic == 2)
127 :
ThatClass(DynamicDimsType(dim1_size, dim2_size))
132 :
ThatClass(DynamicDimsType(dim1_size, dim2_size),
r)
137 explicit NumArray(Int32 dim1_size)
requires(Extents::nb_dynamic == 1)
153 NumArray(Int32 dim1_size, Int32 dim2_size, std::initializer_list<DataType>
alist)
154 requires(Extents::is_full_dynamic() && Extents::rank() == 2)
157 this->m_data.copyInitializerList(
alist);
162 requires(Extents::isDynamic1D())
165 this->m_data.copyInitializerList(
alist);
170 requires(Extents::isDynamic1D())
173 this->m_data.copy(v);
178 requires(Extents::isDynamic1D())
181 this->m_data.copy(v);
187 , m_total_nb_element(
rhs.m_total_nb_element)
189 _updateSpanPointerFromData();
194 , m_data(std::move(rhs.m_data))
195 , m_total_nb_element(rhs.m_total_nb_element)
199 ThatClass& operator=(ThatClass&&) =
default;
229 m_data.swap(
rhs.m_data);
230 std::swap(m_span,
rhs.m_span);
231 std::swap(m_total_nb_element,
rhs.m_total_nb_element);
244 return m_span.extentsWithOffset();
247 eMemoryRessource memoryRessource()
const {
return m_data.memoryRessource(); }
289 void resize(Int32 dim1_size)
requires(Extents::nb_dynamic == 1)
291 m_span.m_extents = DynamicDimsType(dim1_size);
304 void resize(Int32 dim1_size, Int32 dim2_size, Int32
dim3_size)
requires(Extents::nb_dynamic == 3)
311 void resize(Int32 dim1_size, Int32 dim2_size)
requires(Extents::nb_dynamic == 2)
356 m_span.m_extents =
dims;
383 m_data.
fill(v, indexes, queue);
394 m_data.
fill(v, indexes, &queue);
404 m_data.
fill(v, queue);
414 m_data.
fill(v, &queue);
425 _checkHost(memoryRessource());
481 _resizeAndCopy(
rhs, eMemoryRessource::Unknown, queue);
507 _resizeAndCopy(
rhs, eMemoryRessource::Unknown, &queue);
520 _resizeAndCopy(
rhs.constMDSpan(),
rhs.memoryRessource(), queue);
533 _resizeAndCopy(
rhs.constMDSpan(),
rhs.memoryRessource(), &queue);
539 DataType&
operator[](Int32 i)
requires(Extents::rank() == 1) {
return m_span(i); }
541 DataType
operator[](Int32 i)
const requires(Extents::rank() == 1) {
return m_span(i); }
546 DataType
operator()(Int32 i, Int32
j, Int32
k, Int32 l)
const requires(Extents::rank() == 4)
548 return m_span(i,
j,
k, l);
551 DataType&
operator()(Int32 i, Int32
j, Int32
k, Int32 l)
requires(Extents::rank() == 4)
553 return m_span(i,
j,
k, l);
557 DataType
operator()(Int32 i, Int32
j, Int32
k)
const requires(Extents::rank() == 3)
559 return m_span(i,
j,
k);
562 DataType&
operator()(Int32 i, Int32
j, Int32
k)
requires(Extents::rank() == 3)
564 return m_span(i,
j,
k);
568 DataType
operator()(Int32 i, Int32
j)
const requires(Extents::rank() == 2)
573 DataType&
operator()(Int32 i, Int32
j)
requires(Extents::rank() == 2)
578 DataType
operator()(Int32 i)
const requires(Extents::rank() == 1) {
return m_span(i); }
580 DataType&
operator()(Int32 i)
requires(Extents::rank() == 1) {
return m_span(i); }
599 ARCANE_DEPRECATED_REASON(
"Y2023: Use operator() instead")
602 return m_span(i,
j,
k, l);
605 ARCANE_DEPRECATED_REASON(
"Y2023: Use operator() instead")
608 return m_span(i,
j,
k);
611 ARCANE_DEPRECATED_REASON(
"Y2023: Use operator() instead")
617 ARCANE_DEPRECATED_REASON(
"Y2023: Use operator() instead")
621 ARCANE_DEPRECATED_REASON(
"Y2023: Use operator() instead")
622 DataType&
s(ArrayBoundsIndexType idx)
630 ARCANE_DEPRECATED_REASON(
"Y2024: Use mdspan() instead")
634 ARCANE_DEPRECATED_REASON(
"Y2024: Use mdspan() instead")
638 ARCANE_DEPRECATED_REASON(
"Y2024: Use constMDSpan() instead")
682 Int64 m_total_nb_element = 0;
686 void _updateSpanPointerFromData()
688 m_span.m_ptr = m_data.to1DSpan().data();
691 void _resizeAndCopy(ConstMDSpanType rhs,
eMemoryRessource input_ressource,
const RunQueue* queue)
693 this->
resize(rhs.extents().dynamicExtents());
694 m_data.copyOnly(rhs.to1DSpan(), input_ressource, queue);
695 _updateSpanPointerFromData();
701 m_total_nb_element = m_span.extents().totalNbElement();
702 m_data.resize(m_total_nb_element);
703 _updateSpanPointerFromData();
715 if constexpr (ExtentsType::nb_dynamic == 0) {
716 resize(DynamicDimsType());
File d'exécution pour un accélérateur.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
constexpr ARCCORE_HOST_DEVICE Int32 extent3() const
Valeur de la quatrième dimension.
constexpr ARCCORE_HOST_DEVICE Int32 extent2() const
Valeur de la troisième dimension.
constexpr ARCCORE_HOST_DEVICE Int32 extent0() const
Valeur de la première dimension.
constexpr ARCCORE_HOST_DEVICE Int32 extent1() const
Valeur de la deuxième dimension.
Tableaux multi-dimensionnels pour les types numériques accessibles sur accélérateurs.
void resizeDestructive(Int32 dim1_size, Int32 dim2_size, Int32 dim3_size, Int32 dim4_size)
Modifie la taille du tableau.
DataType operator()(Int32 i) const
Valeur pour l'élément i.
void resizeDestructive(Int32 dim1_size, Int32 dim2_size)
Modifie la taille du tableau en ne gardant pas les valeurs actuelles.
void copy(const ThatClass &rhs, const RunQueue *queue)
Copie dans l'instance les valeurs de rhs via la file queue.
constexpr Int32 extent0() const
Valeur de la première dimension.
Span< const DataType > to1DSpan() const
Vue 1D constante sur l'instance.
Span< std::byte > bytes()
Vue sous forme d'octets.
DataType & s(Int32 i, Int32 j, Int32 k, Int32 l)
Positionne la valeur pour l'élément i,j,k,l.
DataType & operator()(Int32 i, Int32 j)
Positionne la valeur pour l'élément i,j.
constexpr SmallSpan< const DataType > to1DConstSmallSpan() const
Vue constante 1D sur l'instance (uniquement si rank == 1)
constexpr Int32 dim4Size() const
Valeur de la quatrième dimension.
DataType & operator()(Int32 i)
Positionne la valeur pour l'élément i.
NumArray(Int32 dim1_size, Int32 dim2_size, Int32 dim3_size)
Construit un tableau avec 3 valeurs dynamiques.
void swap(ThatClass &rhs)
Échange les données avec rhs.
void copy(const ThatClass &rhs)
Copie dans l'instance les valeurs de rhs.
MDSpanType span()
Vue multi-dimension sur l'instance.
Span< DataType > to1DSpan()
Vue 1D sur l'instance.
static constexpr int rank()
Nombre de dimensions du tableau.
DataType * _internalData()
DataType operator()(Int32 i, Int32 j) const
Valeur pour l'élément i,j.
NumArray(Int32 dim1_size, Int32 dim2_size)
Construit un tableau avec 2 valeurs dynamiques.
void fill(const DataType &v, const RunQueue *queue)
Remplit les éléments de l'instance la valeur v en utilisant la file queue.
void copy(SmallSpan< const DataType > rhs)
Copie dans l'instance les valeurs de rhs.
constexpr Int32 dim3Size() const
Valeur de la troisième dimension.
NumArray(eMemoryRessource r)
Créé un tableau vide utilisant la ressource mémoire r.
MDSpanType mdspan()
Vue multi-dimension sur l'instance.
constexpr SmallSpan< DataType > to1DSmallSpan()
Vue 1D sur l'instance (uniquement si rank == 1)
ThatClass & operator=(const ThatClass &rhs)
Opérateur de recopie.
DataType operator()(Int32 i, Int32 j, Int32 k) const
Valeur pour l'élément i,j,k.
DataType & operator()(Int32 i, Int32 j, Int32 k)
Positionne la valeur pour l'élément i,j,k.
NumArray(Int32 dim1_size, std::initializer_list< DataType > alist)
Construit un tableau à partir de valeurs prédéfinies (uniquement tableaux 1D dynamiques)
DataType & operator[](Int32 i)
Récupère une référence pour l'élément i.
void copy(ConstMDSpanType rhs)
Copie dans l'instance les valeurs de rhs.
void _resize()
Redimensionne le tableau à partir des valeurs de m_span.extents()
void resizeDestructive(Int32 dim1_size, Int32 dim2_size, Int32 dim3_size)
Modifie la taille du tableau en ne gardant pas les valeurs actuelles.
void fill(const DataType &v, const RunQueue &queue)
Remplit les éléments de l'instance la valeur v en utilisant la file queue.
String debugName()
Nom de debug (nul si aucun nom spécifié)
Span< const std::byte > bytes() const
Vue constante forme d'octets.
IMemoryAllocator * memoryAllocator() const
Allocateur mémoire associé
DataType & operator()(ArrayBoundsIndexType idx)
Référence modifiable l'élément idx.
void copy(ConstMDSpanType rhs, const RunQueue &queue)
Copie dans l'instance les valeurs de rhs via la file queue.
ConstMDSpanType mdspan() const
Vue constante multi-dimension sur l'instance.
NumArray(Int32 dim1_size, eMemoryRessource r)
Construit un tableau avec 1 valeur dynamique.
constexpr SmallSpan< const DataType > to1DSmallSpan() const
Vue constante 1D sur l'instance (uniquement si rank == 1)
const DataType & operator()(ArrayBoundsIndexType idx) const
Référence constante pour l'élément idx.
NumArray(Int32 dim1_size, Int32 dim2_size, Int32 dim3_size, Int32 dim4_size)
Construit un tableau avec 4 valeurs dynamiques.
void fill(const DataType &v, SmallSpan< const Int32 > indexes, const RunQueue *queue)
Remplit via la file queue, les valeurs du tableau d'indices données par indexes par la valeur v .
void copy(SmallSpan< const DataType > rhs, const RunQueue &queue)
Copie dans l'instance les valeurs de rhs via la file queue.
void copy(ConstMDSpanType rhs, const RunQueue *queue)
Copie dans l'instance les valeurs de rhs via la file queue.
void resize(const DynamicDimsType &dims)
Modifie la taille du tableau en ne gardant pas les valeurs actuelles.
NumArray(Int32 dim1_size, Int32 dim2_size, eMemoryRessource r)
Construit un tableau avec 2 valeurs dynamiques.
void fill(const DataType &v)
Remplit les valeurs du tableau par v.
void fillHost(const DataType &v)
Remplit les valeurs du tableau par v.
constexpr Int32 extent1() const
Valeur de la deuxième dimension.
void resize(Int32 dim1_size, Int32 dim2_size)
Modifie la taille du tableau en ne gardant pas les valeurs actuelles.
static constexpr Int32 nbDimension()
Nombre de dimensions.
void _resizeInit()
Allocation éventuelle lors de l'initialisation.
void resizeDestructive(const DynamicDimsType &dims)
Modifie la taille du tableau en ne gardant pas les valeurs actuelles.
void resizeDestructive(Int32 dim1_size)
Modifie la taille du tableau en ne gardant pas les valeurs actuelles.
constexpr Int32 dim1Size() const
Valeur de la première dimension.
NumArray(const DynamicDimsType &extents, eMemoryRessource r)
Construit un tableau en spécifiant directement la liste des dimensions.
NumArray()
Construit un tableau vide.
DataType operator()(Int32 i, Int32 j, Int32 k, Int32 l) const
Valeur pour l'élément i,j,k,l.
void fill(const DataType &v, SmallSpan< const Int32 > indexes, const RunQueue &queue)
Remplit via la file queue, les valeurs du tableau d'indices données par indexes par la valeur v .
constexpr Int32 extent3() const
Valeur de la quatrième dimension.
NumArray(Int32 dim1_size, Int32 dim2_size, Int32 dim3_size, Int32 dim4_size, eMemoryRessource r)
Construit un tableau avec 4 valeurs dynamiques.
void copy(SmallSpan< const DataType > rhs, const RunQueue *queue)
Copie dans l'instance les valeurs de rhs via la file queue.
constexpr Int32 dim2Size() const
Valeur de la deuxième dimension.
ConstMDSpanType constSpan() const
Vue constante multi-dimension sur l'instance.
NumArray(Int32 dim1_size)
Construit un tableau avec 1 valeur dynamique.
void setDebugName(const String &str)
Positionne le nom du tableau pour les informations de debug.
ConstMDSpanType constMDSpan() const
Vue constante multi-dimension sur l'instance.
void resize(Int32 dim1_size, Int32 dim2_size, Int32 dim3_size, Int32 dim4_size)
Modifie la taille du tableau en ne gardant pas les valeurs actuelles.
constexpr Int32 extent2() const
Valeur de la troisième dimension.
void resize(Int32 dim1_size, Int32 dim2_size, Int32 dim3_size)
Modifie la taille du tableau en ne gardant pas les valeurs actuelles.
NumArray(Int32 dim1_size, Int32 dim2_size, std::initializer_list< DataType > alist)
Construit un tableau à partir de valeurs prédéfinies (tableaux 2D dynamiques).
NumArray(Int32 dim1_size, Int32 dim2_size, Int32 dim3_size, eMemoryRessource r)
Construit un tableau avec 3 valeurs dynamiques.
void copy(const ThatClass &rhs, const RunQueue &queue)
Copie dans l'instance les valeurs de rhs via la file queue.
NumArray(DynamicDimsType extents)
Construit un tableau en spécifiant directement la liste des dimensions.
NumArray(SmallSpan< const DataType > v)
Construit une instance à partir d'une vue (uniquement tableaux 1D dynamiques)
DataType & operator()(Int32 i, Int32 j, Int32 k, Int32 l)
Positionne la valeur pour l'élément i,j,k,l.
ArrayExtents< Extents > extents() const
Valeurs des dimensions.
DataType operator[](Int32 i) const
Valeur pour l'élément i.
NumArray(Span< const DataType > v)
Construit une instance à partir d'une vue (uniquement tableaux 1D dynamiques)
constexpr Int64 totalNbElement() const
Nombre total d'éléments du tableau.
void resize(Int32 dim1_size)
Modifie la taille du tableau en gardant pas les valeurs actuelles.
Implémentation commune à pour NumArray.
Container pour la classe NumArray.
void fill(const DataType &v, SmallSpan< const Int32 > indexes, const RunQueue *queue)
Remplit les indices données par indexes avec la valeur v.
void setDebugName(const String &name)
Positionne le nom du tableau pour les informations de debug.
String debugName() const
Nom de debug (nul si aucun nom spécifié)
Integer capacity() const
Capacité (nombre d'éléments alloués) du vecteur.
Interface d'un allocateur pour la mémoire.
constexpr view_type smallView()
Vue constante sur cette vue.
constexpr ConstArrayView< value_type > constSmallView() const
Vue constante sur cette vue.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Arccore::eMemoryResource eMemoryRessource
Typedef pour la version Arcane historique (avec 2's')
Integer arcaneCheckArraySize(unsigned long long size)
Vérifie que size peut être converti dans un 'Integer' pour servir de taille à un tableau....
eMemoryResource
Liste des ressources mémoire disponibles.