TrioCFD 1.9.9_beta
TrioCFD documentation
Loading...
Searching...
No Matches
Comm_Group Class Referenceabstract

: This class describes a group of processors on which More...

#include <Comm_Group.h>

Inheritance diagram for Comm_Group:
[legend]
Collaboration diagram for Comm_Group:
[legend]

Public Types

enum  Collective_Op { COLL_SUM , COLL_MIN , COLL_MAX , COLL_PARTIAL_SUM }
enum  TypeHint { CHAR , INT , DOUBLE , FLOAT }

Public Member Functions

 Comm_Group ()
 ~Comm_Group () override
 Destructor (nothing to do for now).
virtual void abort () const =0
virtual void mp_collective_op (const double *x, double *resu, int n, Collective_Op op) const =0
virtual void mp_collective_op (const double *x, double *resu, const Collective_Op *op, int n) const =0
virtual void mp_collective_op (const float *x, float *resu, int n, Collective_Op op) const =0
virtual void mp_collective_op (const float *x, float *resu, const Collective_Op *op, int n) const =0
virtual void mp_collective_op (const int *x, int *resu, int n, Collective_Op op) const =0
virtual void mp_collective_op (const int *x, int *resu, const Collective_Op *op, int n) const =0
virtual void barrier (int tag) const =0
int get_new_tag () const
 Returns a new communication tag for the group.
int rank () const
 Returns the rank of the local processor in the group *this.
int nproc () const
 Returns the number of processors in the group *this.
int get_node_id () const
 Retrieve ID of my numa node.
int get_number_of_nodes () const
virtual void send_recv_start (const ArrOfInt &send_list, const ArrOfInt &send_size, const char *const *const send_buffers, const ArrOfInt &recv_list, const ArrOfInt &recv_size, char *const *const recv_buffers, TypeHint typehint=CHAR) const =0
virtual void send_recv_finish () const =0
virtual void send (int pe, const void *buffer, int size, int tag) const =0
virtual void recv (int pe, void *buffer, int size, int tag) const =0
virtual void broadcast (void *buffer, int size, int pe_source) const =0
virtual void all_to_all (const void *src_buffer, void *dest_buffer, int data_size) const =0
virtual void all_gather (const void *src_buffer, void *dest_buffer, int data_size) const =0
virtual void gather (const void *src_buffer, void *dest_buffer, int data_size, int root) const =0
virtual void all_gatherv (const void *src_buffer, void *dest_buffer, int send_size, const int *recv_size, const int *displs) const =0
Public Member Functions inherited from Objet_U
 ~Objet_U () override
 Destructor. Removes the object from the list of objects registered in "memory".
int numero () const
 Returns the index of the object in Memoire::data.
virtual int duplique () const =0
virtual SortieprintOn (Sortie &) const
 Writes the object to an output stream. Virtual method to override.
virtual EntreereadOn (Entree &)
 Reads an Objet_U from an input stream. Virtual method to override.
virtual unsigned taille_memoire () const =0
virtual int est_egal_a (const Objet_U &) const
 Returns 1 if x and *this are the same instance (same memory address).
virtual const Nomle_nom () const
 Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation.
virtual void nommer (const Nom &)
 Assigns a name to the Objet_U. Virtual method to override.
virtual int reprendre (Entree &)
 Restores an Objet_U from an input stream. Virtual method to override.
virtual int sauvegarder (Sortie &) const
 Saves an Objet_U to an output stream. Virtual method to override.
int get_object_id () const
 Returns the unique identifier of the object (object_id_).
virtual const Type_infoget_info () const
 Returns type information for the Objet_U.
const Nomque_suis_je () const
 Returns the string identifying the class.
const char * le_type () const
 Returns the type name of the Objet_U.
virtual int change_num (const int *const)
 Changes the internal number of the Objet_U.
virtual int lire_motcle_non_standard (const Motcle &motlu, Entree &is)
 Reads non-simple-type parameters of an Objet_U from an input stream.
virtual int associer_ (Objet_U &)
 Associates the Objet_U with another Objet_U. Virtual method to override.
const Interpreteinterprete () const
Interpreteinterprete ()
Public Member Functions inherited from Process
virtual ~Process ()

Static Public Member Functions

static int check_enabled ()
static void set_check_enabled (int flag)
Static Public Member Functions inherited from Objet_U
static const Nomnom_du_cas ()
 Returns a constant reference to the case name. This method is static.
static Nomget_set_nom_du_cas ()
 Returns a non-constant reference to the case name (to allow modification). This method is static.
static const Type_infoinfo ()
 Returns type information for the Objet_U (static version).
static const Objet_Uself_cast (const Objet_U &)
 Method added for casting in Python.
static Objet_Uself_cast (Objet_U &)
Static Public Member Functions inherited from Process
static int me ()
 Returns the rank of the local processor in the current communication group. See Comm_Group::rank() and PE_Groups::current_group().
static int nproc ()
 Returns the number of processors in the current group. See Comm_Group::nproc() and PE_Groups::current_group().
static bool is_parallel ()
static void exit (int exit_code=-1)
 Exit routine for TRUST within a Kokkos region.
static double mp_sum (double)
 Computes the sum of x over all processors in the current group.
static float mp_sum (float)
static trustIdType mp_sum (trustIdType)
 Computes the sum of x over all processors in the current group.
static double mp_max (double)
static double mp_min (double)
static int mp_max (int)
 Returns the maximum value of x across all processors in the current group.
static int mp_min (int)
 Returns the minimum value of x across all processors in the current group.
static double mp_sum_as_double (int v)
static trustIdType mppartial_sum (trustIdType i)
 Computes the partial sum of x over processors 0 to me()-1 (returns 0 on processor 0).
template<typename T>
static void mp_sum_for_each (T &arg1, T &arg2)
 C++14 compatible mp_sum_for_each: combine multiple mp_sum calls into one collective operation Usage: mp_sum_for_each(a, b); mp_sum_for_each(a, b, c); mp_sum_for_each(a, b, c, d); mp_sum_for_each(a, b, c, d, e); All arguments must be of the same type (double or int) and are modified in place. Supports 2-5 parameters.
template<typename T>
static void mp_sum_for_each (T &arg1, T &arg2, T &arg3)
template<typename T>
static void mp_sum_for_each (T &arg1, T &arg2, T &arg3, T &arg4)
template<typename T>
static void mp_sum_for_each (T &arg1, T &arg2, T &arg3, T &arg4, T &arg5)
template<typename T>
static void mp_max_for_each (T &arg1, T &arg2)
 C++14 compatible mp_max_for_each: combine multiple mp_max calls into one collective operation.
template<typename T>
static void mp_max_for_each (T &arg1, T &arg2, T &arg3)
template<typename T>
static void mp_max_for_each (T &arg1, T &arg2, T &arg3, T &arg4)
template<typename T>
static void mp_max_for_each (T &arg1, T &arg2, T &arg3, T &arg4, T &arg5)
template<typename T>
static void mp_min_for_each (T &arg1, T &arg2)
 C++14 compatible mp_min_for_each: combine multiple mp_min calls into one collective operation.
template<typename T>
static void mp_min_for_each (T &arg1, T &arg2, T &arg3)
template<typename T>
static void mp_min_for_each (T &arg1, T &arg2, T &arg3, T &arg4)
template<typename T>
static void mp_min_for_each (T &arg1, T &arg2, T &arg3, T &arg4, T &arg5)
template<typename _TYPE_>
static void mp_sum_for_each_item (TRUSTArray< _TYPE_ > &x, int n=-1)
template<typename _TYPE_>
static void mp_max_for_each_item (TRUSTArray< _TYPE_ > &x, int n=-1)
template<typename _TYPE_>
static void mp_min_for_each_item (TRUSTArray< _TYPE_ > &x, int n=-1)
static bool mp_and (bool)
 Computes the logical AND of b across all processors in the current group.
static bool mp_or (bool)
static int check_int_overflow (trustIdType)
static int je_suis_maitre ()
 Returns 1 if on the master processor of the current group (i.e. me() == 0), 0 otherwise.
static KOKKOS_INLINE_FUNCTION void Kokkos_exit (const char *)
 Exit routine for TRUST within a Kokkos region.
static int node_master ()
 Returns 1 if on the NUMA node master processor, 0 otherwise.
static void exit (const Nom &message, int exit_code=-1)
static bool is_sequential ()
static void barrier ()
 Synchronizes all processors in the current group (waits until all processors have reached the barrier).
static void abort ()
 Abort routine for TRUST on a fatal error.
static SortieJournal (int message_level=0)
 Returns a static Sortie object used as an event journal.
static double ram_processeur ()
static void imprimer_ram_totale (int all_process=0)
static bool force_single_file (const int ranks, const Nom &filename)

Protected Member Functions

 Comm_Group (const Comm_Group &)
 Copy constructor is forbidden!
const Comm_Groupoperator= (const Comm_Group &)
 Assignment is forbidden!
virtual void init_group (const ArrOfInt &pe_list)
 This function must be called simultaneously by all PEs of the current_group with the same parameters.
void init_group_node (int nproc, int loc_rank, int glob_rank)
 Initialize all the information relative to world sizes and ranks for node communicator.
void init_group_trio (int nproc, int rank)
 Initializes groupe_TRUST().
Protected Member Functions inherited from Objet_U
 Objet_U ()
 Default constructor: assigns a unique identifier to the object (object_id_) and registers the object in "memory" by giving it a num_obj number.
 Objet_U (const Objet_U &)
 Copy constructor.
const Objet_Uoperator= (const Objet_U &)
 Assignment operator: does nothing (the number and identifier are preserved).
virtual void set_param (Param &) const

Protected Attributes

int node_id_ = -1
int nb_nodes_ = -1

Friends

class PE_Groups

Additional Inherited Members

Static Public Attributes inherited from Objet_U
static double precision_geom = 1e-10
static constexpr bool HAS_POINTER = false
static int dimension =0
static int format_precision_geom =11
static int axi =0
static int bidim_axi =0
static int DEACTIVATE_SIGINT_CATCH =0
static Type_info info_obj
static bool disable_TU =false
 Flag to disable or not the writing of the .TU files.
static bool stat_per_proc_perf_log =false
 Flag to enable the writing of the statistics detailed per processor in _csv.TU file.
Static Public Attributes inherited from Process
static int exception_sur_exit =0
static int multiple_files =5120

Detailed Description

: This class describes a group of processors on which

a portion of code executes simultaneously. It provides all the methods for exchanging data between the processors of the group (mpsum, send, recv, ...), and for synchronizing processors (barrier). It is specialized according to the network layer (MPI, PVM, ...). Note: these methods are reserved for low-level operations (TRUST kernel). In normal code, use the high-level communication class methods: (envoyer(), envoyer_broadcast(), class Schema_Comm, class Process, etc.) To create a new group and use it, see class PE_Groups. For the initialization procedure, see PE_Groups::Initialize().

Definition at line 36 of file Comm_Group.h.

Member Enumeration Documentation

◆ Collective_Op

Enumerator
COLL_SUM 
COLL_MIN 
COLL_MAX 
COLL_PARTIAL_SUM 

Definition at line 49 of file Comm_Group.h.

◆ TypeHint

Enumerator
CHAR 
INT 
DOUBLE 
FLOAT 

Definition at line 79 of file Comm_Group.h.

Constructor & Destructor Documentation

◆ Comm_Group() [1/2]

Comm_Group::Comm_Group ( )

Definition at line 38 of file Comm_Group.cpp.

◆ ~Comm_Group()

Comm_Group::~Comm_Group ( )
override

Destructor (nothing to do for now).

Definition at line 72 of file Comm_Group.cpp.

◆ Comm_Group() [2/2]

Comm_Group::Comm_Group ( const Comm_Group & a)
protected

Copy constructor is forbidden!

Definition at line 54 of file Comm_Group.cpp.

Member Function Documentation

◆ abort()

virtual void Comm_Group::abort ( ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ all_gather()

virtual void Comm_Group::all_gather ( const void * src_buffer,
void * dest_buffer,
int data_size ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ all_gatherv()

virtual void Comm_Group::all_gatherv ( const void * src_buffer,
void * dest_buffer,
int send_size,
const int * recv_size,
const int * displs ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ all_to_all()

virtual void Comm_Group::all_to_all ( const void * src_buffer,
void * dest_buffer,
int data_size ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ barrier()

virtual void Comm_Group::barrier ( int tag) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ broadcast()

virtual void Comm_Group::broadcast ( void * buffer,
int size,
int pe_source ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ check_enabled()

int Comm_Group::check_enabled ( )
inlinestatic

Definition at line 154 of file Comm_Group.h.

◆ gather()

virtual void Comm_Group::gather ( const void * src_buffer,
void * dest_buffer,
int data_size,
int root ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ get_new_tag()

int Comm_Group::get_new_tag ( ) const
inline

Returns a new communication tag for the group.

Side effect: increments the group_communication_tag_ member.

Definition at line 164 of file Comm_Group.h.

◆ get_node_id()

int Comm_Group::get_node_id ( ) const
inline

Retrieve ID of my numa node.

Definition at line 194 of file Comm_Group.h.

◆ get_number_of_nodes()

int Comm_Group::get_number_of_nodes ( ) const
inline

Definition at line 199 of file Comm_Group.h.

◆ init_group()

void Comm_Group::init_group ( const ArrOfInt & pe_list)
protectedvirtual

This function must be called simultaneously by all PEs of the current_group with the same parameters.

The processors in pe_list are the ranks within current_group() of the processors of the new group. The master of the group is the first in the list. The rank of the current processor, if it is in the group, is determined by its position in the list. There must be no duplicates. This function is called by the init_group methods of derived classes.

Reimplemented in Comm_Group_Noparallel.

Definition at line 84 of file Comm_Group.cpp.

◆ init_group_node()

void Comm_Group::init_group_node ( int nproc,
int loc_rank,
int glob_rank )
protected

Initialize all the information relative to world sizes and ranks for node communicator.

This method is called by derived classes when initializing communicator on node

Definition at line 172 of file Comm_Group.cpp.

◆ init_group_trio()

void Comm_Group::init_group_trio ( int nproc_tot,
int arank )
protected

Initializes groupe_TRUST().

This method is called by init_group_trio() of derived classes.

Definition at line 153 of file Comm_Group.cpp.

◆ mp_collective_op() [1/6]

virtual void Comm_Group::mp_collective_op ( const double * x,
double * resu,
const Collective_Op * op,
int n ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ mp_collective_op() [2/6]

virtual void Comm_Group::mp_collective_op ( const double * x,
double * resu,
int n,
Collective_Op op ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ mp_collective_op() [3/6]

virtual void Comm_Group::mp_collective_op ( const float * x,
float * resu,
const Collective_Op * op,
int n ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ mp_collective_op() [4/6]

virtual void Comm_Group::mp_collective_op ( const float * x,
float * resu,
int n,
Collective_Op op ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ mp_collective_op() [5/6]

virtual void Comm_Group::mp_collective_op ( const int * x,
int * resu,
const Collective_Op * op,
int n ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ mp_collective_op() [6/6]

virtual void Comm_Group::mp_collective_op ( const int * x,
int * resu,
int n,
Collective_Op op ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ nproc()

int Comm_Group::nproc ( ) const
inline

Returns the number of processors in the group *this.

Definition at line 185 of file Comm_Group.h.

◆ operator=()

const Comm_Group & Comm_Group::operator= ( const Comm_Group & )
protected

Assignment is forbidden!

Definition at line 63 of file Comm_Group.cpp.

◆ rank()

int Comm_Group::rank ( ) const
inline

Returns the rank of the local processor in the group *this.

or -1 if this processor is not in the group.

Definition at line 177 of file Comm_Group.h.

◆ recv()

virtual void Comm_Group::recv ( int pe,
void * buffer,
int size,
int tag ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ send()

virtual void Comm_Group::send ( int pe,
const void * buffer,
int size,
int tag ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ send_recv_finish()

virtual void Comm_Group::send_recv_finish ( ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ send_recv_start()

virtual void Comm_Group::send_recv_start ( const ArrOfInt & send_list,
const ArrOfInt & send_size,
const char *const *const send_buffers,
const ArrOfInt & recv_list,
const ArrOfInt & recv_size,
char *const *const recv_buffers,
TypeHint typehint = CHAR ) const
pure virtual

Implemented in Comm_Group_MPI, and Comm_Group_Noparallel.

◆ set_check_enabled()

void Comm_Group::set_check_enabled ( int flag)
static

Definition at line 188 of file Comm_Group.cpp.

◆ PE_Groups

friend class PE_Groups
friend

Definition at line 120 of file Comm_Group.h.

Member Data Documentation

◆ nb_nodes_

int Comm_Group::nb_nodes_ = -1
protected

Definition at line 126 of file Comm_Group.h.

◆ node_id_

int Comm_Group::node_id_ = -1
protected

Definition at line 124 of file Comm_Group.h.


The documentation for this class was generated from the following files: