16#include <Comm_Group.h>
25static int ngroups = 0;
26static int max_ngroups = 100;
27const Comm_Group * PE_Groups::current_group_ = 0;
35int PE_Groups::check_current_group()
38 assert(current_group_ == &(groups[ngroups-1].valeur()));
55 if (liste_pe.
size_array()==1 && force_Comm_Group_NoParallel)
58 group.typer(
"Comm_Group_NoParallel");
63 group.typer(groups[0]->que_suis_je());
121 if (ngroups >= max_ngroups-1)
123 Cerr <<
"Comm_Group::enter_group : fatal, too many groups" << finl;
127 if (my_rank_in_group >= 0)
131 groups[ngroups] = group;
132 current_group_ = &group;
161 Cerr <<
"Comm_Group::exit_group() error : trying to exit from TRUST main group." << finl;
165 current_group_ = &(groups[ngroups-1].valeur());
177 const int world_rank = group.world_ranks_[rank];
178 const int local_rank = dest_group.local_ranks_[world_rank];
188 return groups[0].valeur();
197 return node_group.valeur();
206 return node_master.valeur();
214 assert(user_defined_group);
215 return user_defined_group.valeur();
225 assert(ngroups == 0);
227 groups[0] = groupe_trio_u;
228 current_group_ = &groupe_trio_u;
241 assert(!user_defined_group);
242 user_defined_group = ngrp;
247 return bool(user_defined_group);
254 assert(!node_master);
265 assert(ngroups == 1);
271 user_defined_group.reset();
: Cette classe decrit un groupe de processeurs sur lesquels
static int check_enabled()
virtual void barrier(int tag) const =0
virtual void init_group(const ArrOfInt &pe_list)
Cette fonction doit etre appelee simultanement par tous les PEs du groupe current_group avec les meme...
static void initialize_user_defined_group(const Comm_Group &ngrp)
static int enter_group(const Comm_Group &group)
Si le processeur local appartient au groupe, le groupe courant pour ce processeur devient "group" et ...
static void create_group(const ArrOfInt &liste_pe, OWN_PTR(Comm_Group) &group, int force_Comm_Group_NoParallel=0)
Creation d'un nouveau groupe de processeurs (utilisation possible n'importe ou dans le code).
static void init_group(const ArrOfInt &liste_pe, OWN_PTR(Comm_Group) &group)
Initialisation d'un nouveau groupe de processeurs deja instantie (utilisation possible n'importe ou d...
static void initialize_node_master(const Comm_Group &ngrp)
Methode a appeler apres l'initialisation de trio_u_world et de node_group et l'initialisation des com...
static const int & get_nb_groups()
static void finalize()
Methode a appeler en fin d'execution, une fois qu'on est revenu dans le groupe_TRUST() et juste avant...
static const Comm_Group & get_node_master()
Renvoie le groupe contenant le maitre de mon noeud.
static void initialize(const Comm_Group &groupe_trio_u)
Methode a appeler au debut de l'execution (MAIN.
static void initialize_node(const Comm_Group &ngrp)
Methode a appeler apres l'initialisation de trio_u_world et l'initialisation des compteurs statistiqu...
static const Comm_Group & get_user_defined_group()
Renvoie une reference au groupe sur defini par l'utilisateur.
static const Comm_Group & get_node_group()
Renvoie une reference au groupe sur les noeuds.
static bool has_user_defined_group()
static const Comm_Group & current_group()
renvoie une reference au groupe de processeurs actif courant
static int rank_translate(int rank, const Comm_Group &group, const Comm_Group &dest_group=current_group())
Calcule le rank dans le groupe courant du processeur de rang "rank" dans le "group".
static const Comm_Group & groupe_TRUST()
Renvoie une reference au groupe de tous les processeurs TRUST.
static void exit_group()
Retourne dans le groupe ou l'on etait avant le dernier enter_group() reussi (dont le resultat a ete 1...
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
_SIZE_ size_array() const