Classe basée sur MpiDynamicMachineMemoryWindowBaseInternal mais pouvant gérer plusieurs segments par processus. Plus de détails...
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< Int32 > | machineRanks () 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< Int64 > | m_need_resize |
MPI_Win | m_win_actual_sizeof |
Span< Int64 > | m_sizeof_used_part |
MPI_Win | m_win_target_segments |
Span< Int32 > | m_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< Int32 > | m_machine_ranks |
UniqueArray< Span< const std::byte > > | m_add_requests |
bool | m_add_requested = false |
UniqueArray< Int64 > | m_resize_requests |
bool | m_resize_requested = false |
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.
|
explicit |
Le sizeof_segments ne doit pas être conservé !
Définition à la ligne 29 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::~MpiDynamicMultiMachineMemoryWindowBaseInternal | ( | ) |
Définition à la ligne 209 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
|
private |
Définition à la ligne 649 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
|
private |
Définition à la ligne 793 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
|
private |
Définition à la ligne 676 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
|
private |
Définition à la ligne 640 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
|
private |
Définition à la ligne 631 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
|
private |
Définition à la ligne 779 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
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.
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.
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().
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.
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.
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.
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.
Définition à la ligne 232 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
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.
num_seg | La position (ou id) locale du segment. |
elem | Les é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().
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.
thread | Le thread qui demande l'ajout. TODO Trouver un autre moyen que ce paramètre. |
rank | Le rang du processus propriétaire du segment à modifier. |
num_seg | La position (ou id) locale du segment à modifier. |
elem | Les é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().
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.
num_seg | La position (ou id) locale du segment. |
new_capacity | La nouvelle capacité demandée. |
Définition à la ligne 529 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
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.
num_seg | La position (ou id) locale du segment. |
new_size | La nouvelle taille. |
Définition à la ligne 557 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
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.
num_seg | La position (ou id) locale du segment. |
Définition à la ligne 280 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
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.
rank | Le rang du processus. |
num_seg | La position (ou id) locale du segment. |
Définition à la ligne 290 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
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.
num_seg | La position (ou id) du segment. |
Définition à la ligne 250 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
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.
rank | Le rang du processus. |
num_seg | La position (ou id) locale du segment. |
Définition à la ligne 260 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
Int32 Arcane::MessagePassing::Mpi::MpiDynamicMultiMachineMemoryWindowBaseInternal::sizeofOneElem | ( | ) | const |
Méthode permettant d'obtenir la taille d'un élement de la fenêtre.
Appel non collectif.
Définition à la ligne 223 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.cc.
|
private |
Définition à la ligne 292 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 291 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 268 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 282 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 284 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 283 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 289 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 287 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 274 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 271 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 295 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 294 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 286 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 277 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 280 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 276 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 273 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.
|
private |
Définition à la ligne 279 du fichier MpiDynamicMultiMachineMemoryWindowBaseInternal.h.