Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Référence de la classe Arcane::ITransferValuesParallelOperationabstract

Envoie de valeurs sur différents processeurs. Plus de détails...

#include <arcane/core/ITransferValuesParallelOperation.h>

+ Graphe de collaboration de Arcane::ITransferValuesParallelOperation:

Fonctions membres publiques

virtual ~ITransferValuesParallelOperation ()
 Destructeur.
 
virtual IParallelMngparallelMng ()=0
 Gestionnaire de parallélisme associé
 
virtual void setTransferRanks (Int32ConstArrayView ranks)=0
 Positionne le tableau indiquant à qui envoyer les valeurs.
 
virtual void addArray (Int32ConstArrayView send_values, SharedArray< Int32 > recv_value)=0
 Ajoute un tableau de Int32.
 
virtual void addArray (Int64ConstArrayView send_values, SharedArray< Int64 > recv_values)=0
 Ajoute un tableau de Int64.
 
virtual void addArray (RealConstArrayView send_values, SharedArray< Real > recv_values)=0
 Ajoute un tableau de Int64.
 
virtual void transferValues ()=0
 Envoie et réceptionne les valeurs.
 

Description détaillée

Envoie de valeurs sur différents processeurs.

Cette opération permet de communiquer des valeurs avec les autres processeurs. Le tableau ranks indique pour chaque élément le rang du processeur auquel il est destiné. Il est ensuite possible de spécifier des tableaux contenant les valeurs à envoyer et à recevoir. Les tableaux d'envois doivent avoir le même nombre d'élément que ranks

Une instance ne sert qu'une fois. Une fois le transfert terminé, elle peut être détruite.

Par exemple, pour un cas à 3 processeurs:

// Processeur de rang 0:
ranks.add(2); // Envoie au rang 2
ranks.add(1); // Envoie au rang 1
ranks.add(1); // Envoie au rang 1
values_1.add(5); // Envoie 5 au rang 2 (ranks[0])
values_1.add(7); // Envoie 7 au rang 1 (ranks[1])
values_1.add(6); // Envoie 6 au rang 1 (ranks[2])
values_2.add(-5); // Envoie -5 au rang 2 (ranks[0])
values_2.add(-7); // Envoie -7 au rang 1 (ranks[1])
values_2.add(-6); // Envoie -6 au rang 1 (ranks[2])
// Processeur de rang 1:
ranks.add(0); // Envoie au rang 0
ranks.add(2); // Envoie au rang 2
values_1.add(1); // Envoie 1 au rang 0 (ranks[0])
values_1.add(3); // Envoie 3 au rang 2 (ranks[1])
values_2.add(23); // Envoie 23 au rang 0 (ranks[0])
values_2.add(24); // Envoie 24 au rang 2 (ranks[1])
// Processeur de rang 2:
ranks.add(0); // Envoie au rang 0
ranks.add(0); // Envoie au rang 0
values_1.add(0); // Envoie 1 au rang 0 (ranks[0])
values_1.add(4); // Envoie 3 au rang 0 (ranks[1])
values_2.add(-1); // Envoie -1 au rang 0 (ranks[0])
values_2.add(4); // Envoie 4 au rang 0 (ranks[1])
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Vecteur 1D de données avec sémantique par valeur (style STL).

Pour effectuer le transfert

Int32UniqueArray recv_values_1;
Int64UniqueArray recv_values_2;
op->setTransferRanks(ranks);
op->addArray(values_1,recv_values_1);
op->addArray(values_2,recv_values_2);
op->transferValues();

Après envoie la processeur de rang 0 aura les valeurs suivantes:

recv_values_1[0] == 1; // envoyé par le rang 1
recv_values_1[1] == 0; // envoyé par le rang 2
recv_values_1[2] == 4; // envoyé par le rang 2
recv_values_2[0] == 23; // envoyé par le rang 1
recv_values_2[1] == -1; // envoyé par le rang 2
recv_values_2[2] == 4; // envoyé par le rang 2

A noter que l'ordre des éléments est indéterminé

Définition à la ligne 107 du fichier ITransferValuesParallelOperation.h.

Documentation des constructeurs et destructeur

◆ ~ITransferValuesParallelOperation()

virtual Arcane::ITransferValuesParallelOperation::~ITransferValuesParallelOperation ( )
inlinevirtual

Destructeur.

Définition à la ligne 111 du fichier ITransferValuesParallelOperation.h.

Documentation des fonctions membres

◆ transferValues()

virtual void Arcane::ITransferValuesParallelOperation::transferValues ( )
pure virtual

Envoie et réceptionne les valeurs.

Cet appel est collectif et bloquant.


La documentation de cette classe a été générée à partir du fichier suivant :