Classe basée sur MpiMachineShMemWinBaseInternal mais pouvant gérer plusieurs segments par processus. Plus de détails...
Graphe de collaboration de Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal:Fonctions membres publiques | |
| MpiMultiMachineShMemWinBaseInternal (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 MpiMachineShMemWinBaseInternal 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 MpiMultiMachineShMemWinBaseInternal.h.
|
explicit |
Le sizeof_segments ne doit pas être conservé !
Définition à la ligne 29 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL.
| Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::~MpiMultiMachineShMemWinBaseInternal | ( | ) |
Définition à la ligne 208 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
|
private |
Définition à la ligne 648 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
|
private |
Définition à la ligne 792 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
|
private |
Définition à la ligne 675 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
|
private |
Définition à la ligne 639 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
|
private |
Définition à la ligne 630 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
|
private |
Définition à la ligne 778 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
| void Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::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 240 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
| void Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::executeAdd | ( | ) |
Méthode permettant d'exécuter les requêtes d'ajout.
Appel collectif.
Définition à la ligne 339 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL.
| void Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::executeAddToAnotherSegment | ( | ) |
Méthode permettant d'exécuter les requêtes d'ajout dans les segments d'autres processus.
Appel collectif.
Définition à la ligne 424 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL, et Arcane::SpanImpl< T, SizeType, Extent >::size().
Voici le graphe d'appel pour cette fonction :| void Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::executeReserve | ( | ) |
Méthode permettant d'exécuter les requêtes de réservation.
Appel collectif.
Définition à la ligne 547 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
| void Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::executeResize | ( | ) |
Méthode permettant d'exécuter les requêtes de redimensionnement.
Appel collectif.
Définition à la ligne 582 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL.
| void Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::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 611 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
| ConstArrayView< Int32 > Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::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 231 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
| void Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::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 309 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL, Arcane::SpanImpl< T, SizeType, Extent >::data(), Arcane::SpanImpl< T, SizeType, Extent >::empty(), et Arcane::SpanImpl< T, SizeType, Extent >::size().
Voici le graphe d'appel pour cette fonction :| void Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::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 375 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL, Arcane::SpanImpl< T, SizeType, Extent >::data(), Arcane::SpanImpl< T, SizeType, Extent >::empty(), et Arcane::SpanImpl< T, SizeType, Extent >::size().
Voici le graphe d'appel pour cette fonction :| void Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::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 528 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL.
| void Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::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 556 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL.
| Span< const std::byte > Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::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 279 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
| Span< const std::byte > Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::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 289 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL.
| Span< std::byte > Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::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 249 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
| Span< std::byte > Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::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 259 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL.
| Int32 Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::sizeofOneElem | ( | ) | const |
Méthode permettant d'obtenir la taille d'un élement de la fenêtre.
Appel non collectif.
Définition à la ligne 222 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
|
private |
Définition à la ligne 292 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 291 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 268 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 282 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 284 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 283 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 289 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 287 du fichier MpiMultiMachineShMemWinBaseInternal.h.
Définition à la ligne 274 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 271 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 295 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 294 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 286 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 277 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 280 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 276 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 273 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 279 du fichier MpiMultiMachineShMemWinBaseInternal.h.