14#include "arcane/core/MachineShMemWinVariable.h"
16#include "arcane/utils/NumericTypes.h"
17#include "arcane/utils/MDSpan.h"
19#include "arcane/core/VariableRefArray.h"
20#include "arcane/core/VariableRefArray2.h"
21#include "arcane/core/MeshVariable.h"
22#include "arcane/core/IVariable.h"
23#include "arcane/core/MeshVariableScalarRef.h"
24#include "arcane/core/internal/MachineShMemWinVariableBase.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_base->nbElemDim1(rank), m_base->nbElemDim2(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));
234template <
class ItemType,
class DataType>
237: m_base(
makeRef(new MachineShMemWinVariableMDBase(var.variable())))
246template <
class ItemType,
class DataType>
253template <
class ItemType,
class DataType>
257 return m_base->machineRanks();
263template <
class ItemType,
class DataType>
273template <
class ItemType,
class DataType>
278 return { span1.
data(), m_base->nbElemDim1(rank), m_nb_elem_dim2 };
284template <
class ItemType,
class DataType>
291 return span2[notlocal_id];
297template <
class ItemType,
class DataType>
301 Int64 size_dim1 = m_vart.asArray().dim1Size();
302 m_nb_elem_dim2 = m_vart.asArray().dim2Size();
304 m_base->updateVariable(size_dim1, m_nb_elem_dim2,
sizeof(DataType));
313template <
class ItemType,
class DataType,
class Extents>
316: m_base(
makeRef(new MachineShMemWinVariableMDBase(var.variable())))
325template <
class ItemType,
class DataType,
class Extents>
332template <
class ItemType,
class DataType,
class Extents>
336 return m_base->machineRanks();
342template <
class ItemType,
class DataType,
class Extents>
352template <
class ItemType,
class DataType,
class Extents>
358 if constexpr (Extents::rank() == 1) {
359 std::array<Int32, 2> nb_elem_mdim{
static_cast<Int32>(m_base->nbElemDim1(rank)), m_shape_dim2[0] };
363 else if constexpr (Extents::rank() == 2) {
364 std::array<Int32, 3> nb_elem_mdim{
static_cast<Int32>(m_base->nbElemDim1(rank)), m_shape_dim2[0], m_shape_dim2[1] };
368 else if constexpr (Extents::rank() == 3) {
369 std::array<Int32, 4> nb_elem_mdim{
static_cast<Int32>(m_base->nbElemDim1(rank)), m_shape_dim2[0], m_shape_dim2[1], m_shape_dim2[2] };
379template <
class ItemType,
class DataType,
class Extents>
393template <
class ItemType,
class DataType,
class Extents>
397 Int64 nb_elem_dim1 = m_vart.asArray().dim1Size();
398 Int32 nb_elem_dim2 = m_vart.asArray().dim2Size();
400 m_base->updateVariable(nb_elem_dim1, nb_elem_dim2,
sizeof(DataType));
403 shape_dim2_view.
copy(m_base->arrayShape().dimensions());
405 m_nb_elem_dim2 = nb_elem_dim2;
415#define ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM1(class_name, item) \
416 template class ARCANE_TEMPLATE_EXPORT class_name<item, Real>; \
417 template class ARCANE_TEMPLATE_EXPORT class_name<item, Real3>; \
418 template class ARCANE_TEMPLATE_EXPORT class_name<item, Real3x3>; \
419 template class ARCANE_TEMPLATE_EXPORT class_name<item, Real2>; \
420 template class ARCANE_TEMPLATE_EXPORT class_name<item, Real2x2>; \
421 template class ARCANE_TEMPLATE_EXPORT class_name<item, Int8>; \
422 template class ARCANE_TEMPLATE_EXPORT class_name<item, Int16>; \
423 template class ARCANE_TEMPLATE_EXPORT class_name<item, Int32>; \
424 template class ARCANE_TEMPLATE_EXPORT class_name<item, Int64>;
426#define ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM(class_name) \
427 ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM1(class_name, Node) \
428 ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM1(class_name, Face) \
429 ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM1(class_name, Cell) \
430 ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE_WITH_ITEM1(class_name, Particle) \
431 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.