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 |
| Méthode permettant de demander une réallocation. | |
| void | _requestRealloc (Int32 owner_pos_segment) const |
| Méthode permettant de supprimer une demande de réallocation. | |
| 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 |
| Fenêtre contiguë avec taille des fenêtres principales. | |
| 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.
Rappels importants : chaque fenêtre principale possède qu'un seul segment (et non un segment par processus). Donc un MPI_Win = un segment.
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
Pour l'instant, il est nécessaire d'avoir le même nombre de segments par processus.
Toutes les tailles utilisées sont en octet. sizeof_type est utilisé uniquement par MPI et à des fins de vérification.
Définition à la ligne 53 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, m_add_requests, m_all_mpi_win, m_need_resize, m_reserved_part_span, m_resize_requests, m_sizeof_used_part, m_target_segments, m_win_actual_sizeof, m_win_need_resize, et m_win_target_segments.
| Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::~MpiMultiMachineShMemWinBaseInternal | ( | ) |
Définition à la ligne 208 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
|
private |
Définition à la ligne 661 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
|
private |
Définition à la ligne 805 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
|
private |
Définition à la ligne 688 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
|
private |
Méthode permettant de supprimer une demande de réallocation.
| owner_pos_segment | Le segment à ne pas réallouer. |
Définition à la ligne 652 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références m_need_resize.
|
private |
Méthode permettant de demander une réallocation.
| owner_pos_segment | Le segment à réallouer. |
| new_capacity | La nouvelle capacité. |
Définition à la ligne 643 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références m_need_resize.
Référencé par executeShrink(), requestAdd(), requestAddToAnotherSegment(), requestReserve(), et requestResize().
Voici le graphe des appelants de cette fonction :
|
private |
Définition à la ligne 791 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.
En mode hybride, ne doit être appelée que par un seul thread par processus.
Définition à la ligne 339 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL, m_add_requests, m_reserved_part_span, et m_sizeof_used_part.
| 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.
En mode hybride, ne doit être appelée que par un seul thread par processus.
Définition à la ligne 424 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL, m_add_requests, m_all_mpi_win, m_reserved_part_span, m_sizeof_used_part, m_target_segments, 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.
En mode hybride, ne doit être appelée que par un seul thread par processus.
Définition à la ligne 560 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
| void Arcane::MessagePassing::Mpi::MpiMultiMachineShMemWinBaseInternal::executeResize | ( | ) |
Méthode permettant d'exécuter les requêtes de redimensionnement.
Appel collectif.
En mode hybride, ne doit être appelée que par un seul thread par processus.
Définition à la ligne 595 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références ARCCORE_FATAL, m_reserved_part_span, m_resize_requests, et m_sizeof_used_part.
| 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.
En mode hybride, ne doit être appelée que par un seul thread par processus.
Définition à la ligne 624 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références _requestRealloc(), m_reserved_part_span, et m_sizeof_used_part.
Voici le graphe d'appel pour cette fonction :| 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 _requestRealloc(), ARCCORE_FATAL, Arcane::SpanImpl< T, SizeType, Extent >::data(), Arcane::SpanImpl< T, SizeType, Extent >::empty(), m_add_requests, m_reserved_part_span, m_sizeof_used_part, 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 _requestRealloc(), ARCCORE_FATAL, Arcane::SpanImpl< T, SizeType, Extent >::data(), Arcane::SpanImpl< T, SizeType, Extent >::empty(), m_add_requests, m_all_mpi_win, m_sizeof_used_part, m_target_segments, 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 540 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références _requestRealloc(), ARCCORE_FATAL, et m_reserved_part_span.
Voici le graphe d'appel pour cette fonction :| 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 569 du fichier MpiMultiMachineShMemWinBaseInternal.cc.
Références _requestRealloc(), ARCCORE_FATAL, m_reserved_part_span, et m_resize_requests.
Voici le graphe d'appel pour cette fonction :| 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.
Références m_reserved_part_span, et m_sizeof_used_part.
| 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, m_all_mpi_win, et m_sizeof_used_part.
| 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.
Références m_reserved_part_span, et m_sizeof_used_part.
| 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, m_all_mpi_win, et m_sizeof_used_part.
| 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 368 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Tableau contenant les requests d'ajouts. Un emplacement par segment local (m_add_requests.size() = m_nb_segments_per_proc).
Définition à la ligne 367 du fichier MpiMultiMachineShMemWinBaseInternal.h.
Référencé par executeAdd(), executeAddToAnotherSegment(), MpiMultiMachineShMemWinBaseInternal(), requestAdd(), et requestAddToAnotherSegment().
|
private |
Tableau contenant toutes les fenêtres principales.
Rappel : un MPI_Win = un segment.
Segment n°S du sous-domaine rang R : mpi_win_seg = S + R * m_nb_segments_per_proc
Définition à la ligne 316 du fichier MpiMultiMachineShMemWinBaseInternal.h.
Référencé par executeAddToAnotherSegment(), MpiMultiMachineShMemWinBaseInternal(), requestAddToAnotherSegment(), segmentConstView(), et segmentView().
|
private |
Définition à la ligne 355 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 357 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 356 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 362 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Définition à la ligne 360 du fichier MpiMultiMachineShMemWinBaseInternal.h.
Vue globale sur fenêtre contiguë avec taille de redimensionnement (ou -1 si redimensionnement non demandé).
Segment n°S du sous-domaine rang R : need_resize_seg = S + R * m_nb_segments_per_proc
Définition à la ligne 329 du fichier MpiMultiMachineShMemWinBaseInternal.h.
Référencé par _requestRealloc(), _requestRealloc(), et MpiMultiMachineShMemWinBaseInternal().
|
private |
Tableau avec les vues sur les segments. La taille des vues correspond à tout l'espace mémoire réservé.
Définition à la ligne 319 du fichier MpiMultiMachineShMemWinBaseInternal.h.
Référencé par executeAdd(), executeAddToAnotherSegment(), executeResize(), executeShrink(), MpiMultiMachineShMemWinBaseInternal(), requestAdd(), requestReserve(), requestResize(), segmentConstView(), et segmentView().
|
private |
Définition à la ligne 374 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Tableau contenant les requests de redimensionnement. Un emplacement par segment local (m_resize_requests.size() = m_nb_segments_per_proc).
Définition à la ligne 373 du fichier MpiMultiMachineShMemWinBaseInternal.h.
Référencé par executeResize(), MpiMultiMachineShMemWinBaseInternal(), et requestResize().
|
private |
Définition à la ligne 359 du fichier MpiMultiMachineShMemWinBaseInternal.h.
|
private |
Vue globale sur fenêtre contiguë avec taille des fenêtres principales.
Segment n°S du sous-domaine rang R : sizeof_used_part_seg = S + R * m_nb_segments_per_proc
Définition à la ligne 337 du fichier MpiMultiMachineShMemWinBaseInternal.h.
Référencé par executeAdd(), executeAddToAnotherSegment(), executeResize(), executeShrink(), MpiMultiMachineShMemWinBaseInternal(), requestAdd(), requestAddToAnotherSegment(), segmentConstView(), segmentConstView(), segmentView(), et segmentView().
|
private |
Vue globale sur fenêtre contiguë avec demande de modification de segment d'un autre sous-domaine.
En considérant qu'un proprio de segment SD veuille modifier le segment ST, il opèrera cette modification :
m_target_segments[ST] = SD (Voir méthode requestAddToAnotherSegment()).
Segment n°S du sous-domaine rang R : target_segments_seg = S + R * m_nb_segments_per_proc
Définition à la ligne 353 du fichier MpiMultiMachineShMemWinBaseInternal.h.
Référencé par executeAddToAnotherSegment(), MpiMultiMachineShMemWinBaseInternal(), et requestAddToAnotherSegment().
|
private |
Fenêtre contiguë avec taille des fenêtres principales.
Définition à la ligne 332 du fichier MpiMultiMachineShMemWinBaseInternal.h.
Référencé par MpiMultiMachineShMemWinBaseInternal().
|
private |
Fenêtre contiguë avec taille de redimensionnement (ou -1 si redimensionnement non demandé).
Définition à la ligne 323 du fichier MpiMultiMachineShMemWinBaseInternal.h.
Référencé par MpiMultiMachineShMemWinBaseInternal().
|
private |
Fenêtre contiguë avec demande de modification de segment d'un autre sous-domaine.
Définition à la ligne 341 du fichier MpiMultiMachineShMemWinBaseInternal.h.
Référencé par MpiMultiMachineShMemWinBaseInternal().