Classe permettant de créer des fenêtres mémoires pour un noeud de calcul. Plus de détails...
Fonctions membres publiques | |
virtual Int32 | sizeofOneElem () const =0 |
Méthode permettant d'obtenir la taille d'un élement de la fenêtre. | |
virtual ConstArrayView< Int32 > | machineRanks () const =0 |
Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre. | |
virtual void | barrier () const =0 |
Méthode permettant d'attendre que tous les processus/threads du noeud appellent cette méthode pour continuer l'exécution. | |
virtual Span< std::byte > | segmentView ()=0 |
Méthode permettant d'obtenir une vue sur notre segment. | |
virtual Span< std::byte > | segmentView (Int32 rank)=0 |
Méthode permettant d'obtenir une vue sur le segment d'un autre sous-domaine du noeud. | |
virtual Span< const std::byte > | segmentConstView () const =0 |
Méthode permettant d'obtenir une vue sur notre segment. | |
virtual Span< const std::byte > | segmentConstView (Int32 rank) const =0 |
Méthode permettant d'obtenir une vue sur le segment d'un autre sous-domaine du noeud. | |
virtual void | add (Span< const std::byte > elem)=0 |
Méthode permettant d'ajouter des élements dans notre segment. | |
virtual void | add ()=0 |
virtual void | addToAnotherSegment (Int32 rank, Span< const std::byte > elem)=0 |
Méthode permettant d'ajouter des éléments dans le segment d'un autre sous-domaine. | |
virtual void | addToAnotherSegment ()=0 |
virtual void | reserve (Int64 new_capacity)=0 |
Méthode permettant de réserver de l'espace mémoire dans notre segment. | |
virtual void | reserve ()=0 |
virtual void | resize (Int64 new_size)=0 |
Méthode permettant de redimensionner notre segment. | |
virtual void | resize ()=0 |
virtual void | shrink ()=0 |
Méthode permettant de réduire l'espace mémoire réservé pour les segments au minimum nécessaire. | |
Classe permettant de créer des fenêtres mémoires pour un noeud de calcul.
Les segments de ces fenêtres ne seront pas contigüs en mémoire et pourront être redimensionnés (une fenêtre par processus et un segment par fenêtre).
La méthode add() pouvant vouloir redimensionner un segment, et ce redimensionnement étant une opération collective, l'appel à add() est donc une opération collective
Afin d'avoir des add() non concurrents, cette opération est possible uniquement sur notre segment. Pour ajouter des éléments dans le segment d'un autre sous-domaine, les méthodes addToAnotherSegment() sont disponibles.
Définition à la ligne 50 du fichier IDynamicMachineMemoryWindowBaseInternal.h.
|
pure virtual |
Voir add(Span<const std::byte> elem).
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Méthode permettant d'ajouter des élements dans notre segment.
Appel collectif.
Si le segment est trop petit, il sera redimensionné.
Les sous-domaines ne souhaitant pas ajouter d'éléments peuvent appeler la méthode add() sans paramètres ou cette méthode avec une vue vide.
elem | Les éléments à ajouter. |
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Voir addToAnotherSegment(Int32 rank, Span<const std::byte> elem).
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Méthode permettant d'ajouter des éléments dans le segment d'un autre sous-domaine.
Appel collectif.
Deux sous-domaines ne doivent pas ajouter d'éléments dans un même segment de sous-domaine.
Si le segment ciblé est trop petit, il sera redimensionné.
Les sous-domaines ne souhaitant pas ajouter d'éléments peuvent appeler la méthode addToAnotherSegment() sans paramètres.
rank | Le sous-domaine dans lequel ajouter des éléments. |
elem | Les éléments à ajouter. |
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Méthode permettant d'attendre que tous les processus/threads du noeud appellent cette méthode pour continuer l'exécution.
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre.
Appel non collectif.
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Voir reserve(Int64 new_capacity)
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Méthode permettant de réserver de l'espace mémoire dans notre segment.
Appel collectif.
Cette méthode ne fait rien si new_capacity est inférieur à l'espace mémoire déjà alloué pour le segment. Pour les processus ne souhaitant pas augmenter l'espace mémoire disponible pour leur segment, il est possible de mettre le paramètre new_capacity à 0 ou d'utiliser la méthode reserve() (sans arguments).
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 la méthode add() pour ajouter des éléments.
Pour redimensionner le segment, la méthode resize(Int64 new_size) est disponible.
new_capacity | La nouvelle capacité demandée. |
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
|
pure virtual |
Méthode permettant de redimensionner notre segment.
Appel collectif.
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.
Pour les processus ne souhaitant pas redimensionner leur segment, il est possible de mettre l'argument new_size à -1 ou d'appeler la méthode resize() (sans arguments).
new_size | La nouvelle taille. |
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Méthode permettant d'obtenir une vue sur notre segment.
Appel non collectif.
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Méthode permettant d'obtenir une vue sur le segment d'un autre sous-domaine du noeud.
Appel non collectif.
rank | Le rang du sous-domaine. |
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Méthode permettant d'obtenir une vue sur notre segment.
Appel non collectif.
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Méthode permettant d'obtenir une vue sur le segment d'un autre sous-domaine du noeud.
Appel non collectif.
rank | Le rang du sous-domaine. |
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Méthode permettant de réduire l'espace mémoire réservé pour les segments au minimum nécessaire.
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.
|
pure virtual |
Méthode permettant d'obtenir la taille d'un élement de la fenêtre.
Appel non collectif.
Implémenté dans Arcane::MessagePassing::HybridDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::Mpi::MpiDynamicMachineMemoryWindowBaseInternal, Arcane::MessagePassing::SharedMemoryDynamicMachineMemoryWindowBaseInternal, et Arcane::SequentialDynamicMachineMemoryWindowBaseInternal.