14#include "arcane/core/MachineShMemWinVariable.h"
16#include "arcane/core/VariableRefArray.h"
17#include "arcane/core/VariableRefArray2.h"
18#include "arcane/core/MeshVariable.h"
19#include "arcane/core/IVariable.h"
20#include "arcane/core/MeshVariableScalarRef.h"
21#include "internal/MachineShMemWinVariableBase.h"
23#include "arcane/utils/NumericTypes.h"
24#include "arcane/utils/MDSpan.h"
27#include "arccore/base/MDIndex.h"
40: m_base(
makeRef(new MachineShMemWinVariableBase(var)))
46MachineShMemWinVariableCommon::
47~MachineShMemWinVariableCommon()
56 return m_base->machineRanks();
74template <
class DataType>
86template <
class DataType>
93template <
class DataType>
103template <
class DataType>
107 m_base->updateVariable(m_vart.asArray().size(),
sizeof(DataType));
116template <
class ItemType,
class DataType>
128template <
class ItemType,
class DataType>
135template <
class ItemType,
class DataType>
145template <
class ItemType,
class DataType>
149 return this->
view(rank)[notlocal_id];
155template <
class ItemType,
class DataType>
159 m_base->updateVariable(m_vart.asArray().size(),
sizeof(DataType));
168template <
class DataType>
171: m_base(
makeRef(new MachineShMemWinVariable2DBase(var.variable())))
180template <
class DataType>
187template <
class DataType>
191 return m_base->machineRanks();
197template <
class DataType>
207template <
class DataType>
212 return { span1.
data(), m_nb_elem_dim1[rank], m_nb_elem_dim2[rank] };
218template <
class DataType>
222 Int64 size_dim1 = m_vart.dim1Size();
223 Int64 size_dim2 = m_vart.dim2Size();
225 m_base->updateVariable(size_dim1, size_dim2,
sizeof(DataType));
227 m_nb_elem_dim1 = m_base->nbElemDim1();
228 m_nb_elem_dim2 = m_base->nbElemDim2();
237template <
class ItemType,
class DataType>
240: m_base(
makeRef(new MachineShMemWinVariableMDBase(var.variable())))
249template <
class ItemType,
class DataType>
256template <
class ItemType,
class DataType>
260 return m_base->machineRanks();
266template <
class ItemType,
class DataType>
276template <
class ItemType,
class DataType>
281 return { span1.
data(), m_nb_elem_dim1[rank], m_nb_elem_dim2 };
287template <
class ItemType,
class DataType>
294 return span2[notlocal_id];
300template <
class ItemType,
class DataType>
304 Int64 size_dim1 = m_vart.asArray().dim1Size();
305 m_nb_elem_dim2 = m_vart.asArray().dim2Size();
307 m_base->updateVariable(size_dim1, m_nb_elem_dim2,
sizeof(DataType));
309 m_nb_elem_dim1 = m_base->nbElemDim1();
318template <
class ItemType,
class DataType,
class Extents>
321: m_base(
makeRef(new MachineShMemWinVariableMDBase(var.variable())))
330template <
class ItemType,
class DataType,
class Extents>
337template <
class ItemType,
class DataType,
class Extents>
341 return m_base->machineRanks();
347template <
class ItemType,
class DataType,
class Extents>
357template <
class ItemType,
class DataType,
class Extents>
363 if constexpr (Extents::rank() == 1) {
364 std::array<Int32, 2> nb_elem_mdim{
static_cast<Int32>(m_nb_elem_dim1[rank]), m_shape_dim2[0] };
368 else if constexpr (Extents::rank() == 2) {
369 std::array<Int32, 3> nb_elem_mdim{
static_cast<Int32>(m_nb_elem_dim1[rank]), m_shape_dim2[0], m_shape_dim2[1] };
373 else if constexpr (Extents::rank() == 3) {
374 std::array<Int32, 4> nb_elem_mdim{
static_cast<Int32>(m_nb_elem_dim1[rank]), m_shape_dim2[0], m_shape_dim2[1], m_shape_dim2[2] };
384template <
class ItemType,
class DataType,
class Extents>
398template <
class ItemType,
class DataType,
class Extents>
402 Int64 nb_elem_dim1 = m_vart.asArray().dim1Size();
403 Int32 nb_elem_dim2 = m_vart.asArray().dim2Size();
405 m_base->updateVariable(nb_elem_dim1, nb_elem_dim2,
sizeof(DataType));
408 shape_dim2_view.
copy(m_base->arrayShape().dimensions());
410 m_nb_elem_dim1 = m_base->nbElemDim1();
411 m_nb_elem_dim2 = nb_elem_dim2;
421#define ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM1(class_name, item) \
422 template class ARCANE_TEMPLATE_EXPORT class_name<item, Real>; \
423 template class ARCANE_TEMPLATE_EXPORT class_name<item, Real3>; \
424 template class ARCANE_TEMPLATE_EXPORT class_name<item, Real3x3>; \
425 template class ARCANE_TEMPLATE_EXPORT class_name<item, Real2>; \
426 template class ARCANE_TEMPLATE_EXPORT class_name<item, Real2x2>; \
427 template class ARCANE_TEMPLATE_EXPORT class_name<item, Int8>; \
428 template class ARCANE_TEMPLATE_EXPORT class_name<item, Int16>; \
429 template class ARCANE_TEMPLATE_EXPORT class_name<item, Int32>; \
430 template class ARCANE_TEMPLATE_EXPORT class_name<item, Int64>;
432#define ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM(class_name) \
433 ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM1(class_name, Node) \
434 ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM1(class_name, Face) \
435 ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM1(class_name, Cell) \
436 ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM1(class_name, Particle) \
437 ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM1(class_name, DoF)
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Types et fonctions associés aux classes Span2Impl, Small2Span and Span2.
Vue constante d'un tableau de type T.
Interface d'une variable.
Classe de base des vues multi-dimensionnelles.
Classe permettant d'accéder aux éléments partagés de la variable en mémoire partagée.
MachineShMemWinMDVariableT(MeshVariableArrayRefT< ItemType, DataType > var)
Constructeur.
MDSpan< DataType, Extents > operator()(Int32 rank, Int32 notlocal_id)
Méthode permettant d'obtenir le tableau multi-dimensionnel d'un item d'un autre sous-domaine.
ConstArrayView< Int32 > machineRanks() const
Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre.
MDSpan< DataType, typename MDDimType< Extents::rank()+1 >::DimType > view(Int32 rank) const
Méthode permettant d'obtenir une vue sur la variable d'un autre sous-domaine du noeud.
void updateVariable()
Méthode permettant de mettre à jour cet objet après un changement dans le maillage et/ou après un red...
void barrier() const
Méthode permettant d'attendre que tous les processus/threads du noeud appellent cette méthode pour co...
Classe permettant d'accéder aux éléments partagés de la variable en mémoire partagée.
Classe permettant d'accéder aux éléments partagés de la variable en mémoire partagée.
Classe permettant d'accéder aux éléments partagés de la variable en mémoire partagée.
void updateVariable()
Méthode permettant de mettre à jour cet objet après un changement dans le maillage et/ou après un red...
Span2< DataType > view(Int32 rank) const
Méthode permettant d'obtenir une vue sur la variable d'un autre sous-domaine du noeud.
void barrier() const
Méthode permettant d'attendre que tous les processus/threads du noeud appellent cette méthode pour co...
Span< DataType > operator()(Int32 rank, Int32 notlocal_id)
Méthode permettant d'obtenir le tableau d'un item d'un autre sous-domaine.
MachineShMemWinMeshVariableArrayT(MeshVariableArrayRefT< ItemType, DataType > var)
Constructeur.
ConstArrayView< Int32 > machineRanks() const
Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre.
Classe permettant d'accéder aux éléments partagés de la variable en mémoire partagée.
void updateVariable()
Méthode permettant de mettre à jour cet objet après un changement dans le maillage.
DataType operator()(Int32 rank, Int32 notlocal_id)
Méthode permettant d'obtenir un élément de la variable d'un autre sous-domaine.
Span< DataType > view(Int32 rank) const
Méthode permettant d'obtenir une vue sur la variable d'un autre sous-domaine du noeud.
MachineShMemWinMeshVariableScalarT(MeshVariableScalarRefT< ItemType, DataType > var)
Constructeur.
Classe permettant d'accéder aux éléments partagés de la variable en mémoire partagée.
Classe permettant d'accéder aux éléments partagés de la variable en mémoire partagée.
ConstArrayView< Int32 > machineRanks() const
Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre.
Span2< DataType > view(Int32 rank) const
Méthode permettant d'obtenir une vue sur le tableau d'un autre sous-domaine du noeud.
MachineShMemWinVariableArray2T(VariableRefArray2T< DataType > var)
Constructeur.
void barrier() const
Méthode permettant d'attendre que tous les processus/threads du noeud appellent cette méthode pour co...
void updateVariable()
Méthode permettant de mettre à jour cet objet après un redimensionnement de la variable.
Classe permettant d'accéder aux éléments partagés de la variable en mémoire partagée.
MachineShMemWinVariableArrayT(VariableRefArrayT< DataType > var)
Constructeur.
Span< DataType > view(Int32 rank) const
Méthode permettant d'obtenir une vue sur le tableau d'un autre sous-domaine du noeud.
void updateVariable()
Méthode permettant de mettre à jour cet objet après un redimensionnement de la variable.
void barrier() const
Méthode permettant d'attendre que tous les processus/threads du noeud appellent cette méthode pour co...
ConstArrayView< Int32 > machineRanks() const
Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre.
MachineShMemWinVariableCommon(IVariable *var)
Constructeur.
Variable tableau sur un type d'entité du maillage.
Variable scalaire sur un type d'entité du maillage.
Vue d'un tableau d'éléments de type T.
Vue pour un tableau 2D dont la taille est un 'Int64'.
__host__ __device__ void copy(const U ©_array)
Recopie le tableau copy_array dans l'instance.
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Vue d'un tableau d'éléments de type T.
Variable tableau bi dimensionnel.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
Span< DataType > asSpan(Span< std::byte, Extent > bytes)
Converti un Span<std::byte> en un Span<DataType>.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.
std::int32_t Int32
Type entier signé sur 32 bits.