16#ifndef communications_array_included
17#define communications_array_included
20#include <Comm_Group.h>
31template<
typename _TYPE_> std::enable_if_t<std::is_arithmetic<_TYPE_>::value,
bool >
32inline envoyer_array(
const _TYPE_ *objet,
int n,
int source,
int cible,
int canal)
35 const int moi = grp.
rank();
39 if (source != moi && source != -1)
42 const char *data = (
const char*) objet;
43 const int sz = (int)
sizeof(_TYPE_) * n;
46 const int nbproc = grp.
nproc();
47 for (
int i = 0; i < nbproc; i++)
53 grp.
send(i, &sz, (
int)
sizeof(
int), canal);
55 grp.
send(i, data, sz, canal);
62 grp.
send(cible, &sz, (
int)
sizeof(
int), canal);
64 grp.
send(cible, data, sz, canal);
70inline bool envoyer_array(
const long *t,
int n,
int source,
int cible,
int canal)
72 return envoyer_array<long>(t,n,source,cible,canal);
76template<
typename _TYPE_> std::enable_if_t<std::is_arithmetic<_TYPE_>::value,
bool >
77inline recevoir_array(
const _TYPE_ *objet,
int n,
int source,
int cible,
int canal)
80 const int moi = grp.
rank();
84 if (cible != moi && cible != -1)
87 const int sz = (int)
sizeof(_TYPE_) * n;
91 grp.
recv(source, &sz_check, (
int)
sizeof(
int), canal);
94 Cerr <<
"Fatal error in template<typename _TYPE_> int recevoir_array : incorrect size\n" <<
" sent=" << sz_check <<
" expected=" << sz << finl;
98 char *data = (
char*) objet;
100 grp.
recv(source, data, sz, canal);
105inline bool recevoir_array(
const long *t,
int n,
int source,
int cible,
int canal)
107 return recevoir_array<long>(t, n, source, cible, canal);
111template<
typename _TYPE_> std::enable_if_t<std::is_arithmetic<_TYPE_>::value,
bool >
112inline envoyer_broadcast_array(_TYPE_ *objet,
int n,
int source)
118 grp.
broadcast(&copie_n, (
int)
sizeof(
int), source);
121 Cerr <<
"Error in template<typename _TYPE_> envoyer_broadcast_array !" << finl;
125 grp.
broadcast(objet, (
int)
sizeof(_TYPE_) * n, source);
130inline bool envoyer_broadcast_array(
long *t,
int n,
int source)
132 return envoyer_broadcast_array<long>(t, n, source);
: Cette classe decrit un groupe de processeurs sur lesquels
static int check_enabled()
virtual void send(int pe, const void *buffer, int size, int tag) const =0
int nproc() const
Renvoie le nombre de processeurs dans le groupe *this.
int rank() const
Renvoie le rang du processeur local dans le groupe *this.
virtual void broadcast(void *buffer, int size, int pe_source) const =0
virtual void recv(int pe, void *buffer, int size, int tag) const =0
static const Comm_Group & current_group()
renvoie une reference au groupe de processeurs actif courant
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.