Arcane  v3.16.8.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Référence de la classe Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal

Classe basée sur MpiDynamicMachineMemoryWindowBaseInternal mais pouvant gérer plusieurs segments par processus. Plus de détails...

#include </__w/arcaneframework.github.io/arcaneframework.github.io/framework/arccore/src/message_passing_mpi/arccore/message_passing_mpi/internal/MpiDynamicMultiMachineMemoryWindowBaseInternal.h>

+ Graphe de collaboration de Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal:

Fonctions membres publiques

 MpiDynamicMultiMachineMemoryWindowBaseInternal (SmallSpan< Int64 > sizeof_segments, Int32 nb_segments_per_proc, Int32 sizeof_type, const MPI_Comm &comm_machine, Int32 comm_machine_rank, Int32 comm_machine_size, ConstArrayView< Int32 > machine_ranks)
 Le sizeof_segments ne doit pas être conservé !
 
Int32 sizeofOneElem () const
 Méthode permettant d'obtenir la taille d'un élement de la fenêtre.
 
ConstArrayView< Int32machineRanks () const
 Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre.
 
void barrier () const
 Méthode permettant d'attendre que tous les processus du noeud appellent cette méthode pour continuer l'exécution.
 
Span< std::byte > segmentView (Int32 num_seg)
 Méthode permettant d'obtenir une vue sur l'un de nos segments.
 
Span< std::byte > segmentView (Int32 rank, Int32 num_seg)
 Méthode permettant d'obtenir une vue sur l'un des segments d'un autre processus du noeud.
 
Span< const std::byte > segmentConstView (Int32 num_seg) const
 Méthode permettant d'obtenir une vue sur l'un de nos segments.
 
Span< const std::byte > segmentConstView (Int32 rank, Int32 num_seg) const
 Méthode permettant d'obtenir une vue sur l'un des segments d'un autre processus du noeud.
 
void requestAdd (Int32 num_seg, Span< const std::byte > elem)
 Méthode permettant de demander l'ajout d'éléments dans l'un de nos segments.
 
void executeAdd ()
 Méthode permettant d'exécuter les requêtes d'ajout.
 
void requestAddToAnotherSegment (Int32 thread, Int32 rank, Int32 num_seg, Span< const std::byte > elem)
 Méthode permettant de demander l'ajout d'éléments dans un des segments de la fenêtre.
 
void executeAddToAnotherSegment ()
 Méthode permettant d'exécuter les requêtes d'ajout dans les segments d'autres processus.
 
void requestReserve (Int32 num_seg, Int64 new_capacity)
 Méthode permettant de demander la réservation d'espace mémoire pour un de nos segments.
 
void executeReserve ()
 Méthode permettant d'exécuter les requêtes de réservation.
 
void requestResize (Int32 num_seg, Int64 new_size)
 Méthode permettant de demander le redimensionnement d'un de nos segments.
 
void executeResize ()
 Méthode permettant d'exécuter les requêtes de redimensionnement.
 
void executeShrink ()
 Méthode permettant de réduire l'espace mémoire réservé pour les segments au minimum nécessaire.
 

Fonctions membres privées

void _requestRealloc (Int32 owner_pos_segment, Int64 new_capacity) const
 
void _requestRealloc (Int32 owner_pos_segment) const
 
void _executeRealloc ()
 
void _realloc ()
 
Int32 _worldToMachine (Int32 world) const
 
Int32 _machineToWorld (Int32 machine) const
 

Attributs privés

UniqueArray< MPI_Win > m_all_mpi_win
 
UniqueArray< Span< std::byte > > m_reserved_part_span
 
MPI_Win m_win_need_resize
 
Span< Int64m_need_resize
 
MPI_Win m_win_actual_sizeof
 
Span< Int64m_sizeof_used_part
 
MPI_Win m_win_target_segments
 
Span< Int32m_target_segments
 
MPI_Comm m_comm_machine
 
Int32 m_comm_machine_size = 0
 
Int32 m_comm_machine_rank = 0
 
Int32 m_sizeof_type = 0
 
Int32 m_nb_segments_per_proc = 0
 
ConstArrayView< Int32m_machine_ranks
 
UniqueArray< Span< const std::byte > > m_add_requests
 
bool m_add_requested = false
 
UniqueArray< Int64m_resize_requests
 
bool m_resize_requested = false
 

Description détaillée

Classe basée sur MpiDynamicMachineMemoryWindowBaseInternal mais pouvant gérer plusieurs segments par processus.

Un segment est identifié par le rang de son propriétaire d'origine et par un id (qui est simplement la position du segment dans la liste des segments locaux).

Les tableaux sont tous 1D. Pour accéder aux infos d'un de nos segments, on doit calculer la position de ces informations avec notre rang machine et la position de ce segment localement. infos_pos = pos_seg + rank * m_nb_segments_per_proc

Définition à la ligne 44 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

Documentation des constructeurs et destructeur

◆ MpiDynamicMultiMachineMemoryWindowBaseInternal()

Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::MpiDynamicMultiMachineMemoryWindowBaseInternal ( SmallSpan< Int64 > sizeof_segments,
Int32 nb_segments_per_proc,
Int32 sizeof_type,
const MPI_Comm & comm_machine,
Int32 comm_machine_rank,
Int32 comm_machine_size,
ConstArrayView< Int32 > machine_ranks )
explicit

Le sizeof_segments ne doit pas être conservé !

Définition à la ligne 29 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ ~MpiDynamicMultiMachineMemoryWindowBaseInternal()

Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::~MpiDynamicMultiMachineMemoryWindowBaseInternal ( )

Définition à la ligne 209 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

Documentation des fonctions membres

◆ _executeRealloc()

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::_executeRealloc ( )
private

Définition à la ligne 649 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ _machineToWorld()

Int32 Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::_machineToWorld ( Int32 machine) const
private

Définition à la ligne 793 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ _realloc()

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::_realloc ( )
private

Définition à la ligne 676 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ _requestRealloc() [1/2]

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::_requestRealloc ( Int32 owner_pos_segment) const
private

Définition à la ligne 640 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ _requestRealloc() [2/2]

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::_requestRealloc ( Int32 owner_pos_segment,
Int64 new_capacity ) const
private

Définition à la ligne 631 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ _worldToMachine()

Int32 Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::_worldToMachine ( Int32 world) const
private

Définition à la ligne 779 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ barrier()

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::barrier ( ) const

Méthode permettant d'attendre que tous les processus du noeud appellent cette méthode pour continuer l'exécution.

Définition à la ligne 241 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ executeAdd()

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::executeAdd ( )

Méthode permettant d'exécuter les requêtes d'ajout.

Appel collectif.

Définition à la ligne 340 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ executeAddToAnotherSegment()

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::executeAddToAnotherSegment ( )

Méthode permettant d'exécuter les requêtes d'ajout dans les segments d'autres processus.

Appel collectif.

Définition à la ligne 425 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

Références Arcane::SpanImpl< T, SizeType, Extent, MinValue >::size().

+ Voici le graphe d'appel pour cette fonction :

◆ executeReserve()

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::executeReserve ( )

Méthode permettant d'exécuter les requêtes de réservation.

Appel collectif.

Définition à la ligne 548 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ executeResize()

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::executeResize ( )

Méthode permettant d'exécuter les requêtes de redimensionnement.

Appel collectif.

Définition à la ligne 583 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ executeShrink()

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::executeShrink ( )

Méthode permettant de réduire l'espace mémoire réservé pour les segments au minimum nécessaire.

Appel collectif.

Définition à la ligne 612 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ machineRanks()

ConstArrayView< Int32 > Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::machineRanks ( ) const

Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre.

Appel non collectif.

Renvoie
Une vue contenant les ids des rangs.

Définition à la ligne 232 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ requestAdd()

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::requestAdd ( Int32 num_seg,
Span< const std::byte > elem )

Méthode permettant de demander l'ajout d'éléments dans l'un de nos segments.

Appel non collectif et pouvant être effectué par plusieurs threads en même temps (si le paramètre num_seg est différent pour chaque thread). Un appel à cette méthode avec un même num_seg avant l'appel à executeAdd() remplacera le premier appel.

Un appel à executeAdd() est nécessaire après le ou les appels à cette méthode. Il ne faut pas appeler une autre méthode requestX() entre temps.

Paramètres
num_segLa position (ou id) locale du segment.
elemLes éléments à ajouter.

Définition à la ligne 310 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

Références Arcane::SpanImpl< T, SizeType, Extent, MinValue >::data(), Arcane::SpanImpl< T, SizeType, Extent, MinValue >::empty(), et Arcane::SpanImpl< T, SizeType, Extent, MinValue >::size().

+ Voici le graphe d'appel pour cette fonction :

◆ requestAddToAnotherSegment()

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::requestAddToAnotherSegment ( Int32 thread,
Int32 rank,
Int32 num_seg,
Span< const std::byte > elem )

Méthode permettant de demander l'ajout d'éléments dans un des segments de la fenêtre.

Appel non collectif et pouvant être effectué par plusieurs threads en même temps (si le paramètre thread est différent pour chaque thread). Un appel à cette méthode avec un même thread avant l'appel à executeaddToAnotherSegment() remplacera le premier appel.

Un appel à executeaddToAnotherSegment() est nécessaire après le ou les appels à cette méthode. Il ne faut pas appeler une autre méthode requestX() entre temps.

Deux sous-domaines ne doivent pas ajouter d'éléments dans un même segment de sous-domaine.

Paramètres
threadLe thread qui demande l'ajout. TODO Trouver un autre moyen que ce paramètre.
rankLe rang du processus propriétaire du segment à modifier.
num_segLa position (ou id) locale du segment à modifier.
elemLes éléments à ajouter.

Définition à la ligne 376 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

Références Arcane::SpanImpl< T, SizeType, Extent, MinValue >::data(), Arcane::SpanImpl< T, SizeType, Extent, MinValue >::empty(), et Arcane::SpanImpl< T, SizeType, Extent, MinValue >::size().

+ Voici le graphe d'appel pour cette fonction :

◆ requestReserve()

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::requestReserve ( Int32 num_seg,
Int64 new_capacity )

Méthode permettant de demander la réservation d'espace mémoire pour un de nos segments.

Cette méthode ne fait rien si new_capacity est inférieur à l'espace mémoire déjà alloué pour le segment.

MPI réservera un espace avec une taille supérieur ou égale à new_capacity.

Cette méthode ne redimensionne pas le segment, il faudra toujours passer par les méthodes add() pour ajouter des éléments.

Pour redimensionner le segment, les méthodes resize() sont disponibles.

Appel non collectif et pouvant être effectué par plusieurs threads en même temps (si le paramètre num_seg est différent pour chaque thread). Un appel à cette méthode avec un même num_seg avant l'appel à executeReserve() remplacera le premier appel.

Un appel à executeReserve() est nécessaire après le ou les appels à cette méthode. Il ne faut pas appeler une autre méthode requestX() entre temps.

Paramètres
num_segLa position (ou id) locale du segment.
new_capacityLa nouvelle capacité demandée.

Définition à la ligne 529 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ requestResize()

void Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::requestResize ( Int32 num_seg,
Int64 new_size )

Méthode permettant de demander le redimensionnement d'un de nos segments.

Si la taille fournie est inférieure à la taille actuelle du segment, les éléments situés après la taille fournie seront supprimés.

Si la taille fournie est supérieur à l'espace mémoire réservé au segment, un realloc sera effectué.

Appel non collectif et pouvant être effectué par plusieurs threads en même temps (si le paramètre num_seg est différent pour chaque thread). Un appel à cette méthode avec un même num_seg avant l'appel à executeResize() remplacera le premier appel.

Un appel à executeResize() est nécessaire après le ou les appels à cette méthode. Il ne faut pas appeler une autre méthode requestX() entre temps.

Paramètres
num_segLa position (ou id) locale du segment.
new_sizeLa nouvelle taille.

Définition à la ligne 557 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ segmentConstView() [1/2]

Span< const std::byte > Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::segmentConstView ( Int32 num_seg) const

Méthode permettant d'obtenir une vue sur l'un de nos segments.

Appel non collectif.

Paramètres
num_segLa position (ou id) locale du segment.
Renvoie
Une vue.

Définition à la ligne 280 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ segmentConstView() [2/2]

Span< const std::byte > Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::segmentConstView ( Int32 rank,
Int32 num_seg ) const

Méthode permettant d'obtenir une vue sur l'un des segments d'un autre processus du noeud.

Appel non collectif.

Paramètres
rankLe rang du processus.
num_segLa position (ou id) locale du segment.
Renvoie
Une vue.

Définition à la ligne 290 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ segmentView() [1/2]

Span< std::byte > Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::segmentView ( Int32 num_seg)

Méthode permettant d'obtenir une vue sur l'un de nos segments.

Appel non collectif.

Paramètres
num_segLa position (ou id) du segment.
Renvoie
Une vue.

Définition à la ligne 250 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ segmentView() [2/2]

Span< std::byte > Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::segmentView ( Int32 rank,
Int32 num_seg )

Méthode permettant d'obtenir une vue sur l'un des segments d'un autre processus du noeud.

Appel non collectif.

Paramètres
rankLe rang du processus.
num_segLa position (ou id) locale du segment.
Renvoie
Une vue.

Définition à la ligne 260 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

◆ sizeofOneElem()

Int32 Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::sizeofOneElem ( ) const

Méthode permettant d'obtenir la taille d'un élement de la fenêtre.

Appel non collectif.

Renvoie
La taille d'un élement.

Définition à la ligne 223 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.

Documentation des données membres

◆ m_add_requested

bool Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_add_requested = false
private

Définition à la ligne 292 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_add_requests

UniqueArray<Span<const std::byte> > Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_add_requests
private

Définition à la ligne 291 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_all_mpi_win

UniqueArray<MPI_Win> Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_all_mpi_win
private

Définition à la ligne 268 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_comm_machine

MPI_Comm Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_comm_machine
private

Définition à la ligne 282 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_comm_machine_rank

Int32 Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_comm_machine_rank = 0
private

Définition à la ligne 284 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_comm_machine_size

Int32 Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_comm_machine_size = 0
private

Définition à la ligne 283 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_machine_ranks

ConstArrayView<Int32> Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_machine_ranks
private

Définition à la ligne 289 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_nb_segments_per_proc

Int32 Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_nb_segments_per_proc = 0
private

Définition à la ligne 287 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_need_resize

Span<Int64> Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_need_resize
private

Définition à la ligne 274 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_reserved_part_span

UniqueArray<Span<std::byte> > Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_reserved_part_span
private

Définition à la ligne 271 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_resize_requested

bool Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_resize_requested = false
private

Définition à la ligne 295 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_resize_requests

UniqueArray<Int64> Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_resize_requests
private

Définition à la ligne 294 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_sizeof_type

Int32 Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_sizeof_type = 0
private

Définition à la ligne 286 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_sizeof_used_part

Span<Int64> Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_sizeof_used_part
private

Définition à la ligne 277 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_target_segments

Span<Int32> Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_target_segments
private

Définition à la ligne 280 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_win_actual_sizeof

MPI_Win Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_win_actual_sizeof
private

Définition à la ligne 276 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_win_need_resize

MPI_Win Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_win_need_resize
private

Définition à la ligne 273 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.

◆ m_win_target_segments

MPI_Win Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::m_win_target_segments
private

Définition à la ligne 279 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.


La documentation de cette classe a été générée à partir des fichiers suivants :