14 #ifndef COMMUNICATOR_INCLUDED
15 #define COMMUNICATOR_INCLUDED
59 static int init(
int *pargc,
char ***pargv);
85 static int setup(
int ninstance = 1);
95 static int setup(
const std::vector<int>& lattice_size,
96 std::vector<int>& grid_size,
108 #ifdef ENABLE_MULTI_INSTANCE
109 static int self_global();
110 static int world_id();
114 static int ipe(
const int dir);
115 static int npe(
const int dir);
127 #ifdef ENABLE_MULTI_INSTANCE
128 static int sync_global();
132 static int broadcast(
int count,
double *data,
int sender);
133 static int broadcast(
int count,
float *data,
int sender);
134 static int broadcast(
int count,
int *data,
int sender);
135 static int broadcast(
int count,
string& data,
int sender);
137 static int exchange(
int count,
double *recv_buf,
double *send_buf,
int idir,
int ipm,
int tag);
138 static int exchange(
int count,
float *recv_buf,
float *send_buf,
int idir,
int ipm,
int tag);
139 static int exchange(
int count,
int *recv_buf,
int *send_buf,
int idir,
int ipm,
int tag);
141 static int send_1to1(
int count,
double *recv_buf,
double *send_buf,
int p_to,
int p_from,
int tag);
142 static int send_1to1(
int count,
float *recv_buf,
float *send_buf,
int p_to,
int p_from,
int tag);
143 static int send_1to1(
int count,
int *recv_buf,
int *send_buf,
int p_to,
int p_from,
int tag);
145 static int reduce_sum(
int count,
double *recv_buf,
double *send_buf,
int pattern = 0);
146 static int reduce_sum(
int count,
float *recv_buf,
float *send_buf,
int pattern = 0);
147 static int reduce_sum(
int count,
int *recv_buf,
int *send_buf,
int pattern = 0);
149 static int reduce_max(
int count,
double *recv_buf,
double *send_buf,
int pattern = 0);
150 static int reduce_max(
int count,
float *recv_buf,
float *send_buf,
int pattern = 0);
151 static int reduce_max(
int count,
int *recv_buf,
int *send_buf,
int pattern = 0);
153 static int reduce_min(
int count,
double *recv_buf,
double *send_buf,
int pattern = 0);
154 static int reduce_min(
int count,
float *recv_buf,
float *send_buf,
int pattern = 0);
155 static int reduce_min(
int count,
int *recv_buf,
int *send_buf,
int pattern = 0);
187 static int exchange(
size_t size,
void *recv_buf,
void *send_buf,
int idir,
int ipm,
int tag);
189 static int send_1to1(
size_t size,
void *recv_buf,
void *send_buf,
int send_to,
int recv_from,
int tag);
static int npe(const int dir)
logical grid extent
static int reduce_max(int count, double *recv_buf, double *send_buf, int pattern=0)
find a global maximum of an array of double over the communicator. pattern specifies the dimensions t...
static void abort()
terminate communicator
static bool is_primary_master()
check if the present node is primary in global communicator.
static int init(int *pargc, char ***pargv)
initialize communicator
static int grid_coord(int *grid_coord, const int rank)
find grid coordinate from rank number.
Communication library which wraps MPI.
static int reduce_min(int count, double *recv_buf, double *send_buf, int pattern=0)
find a global minimum of an array of double over the communicator. pattern specifies the dimensions t...
Communicator()
no instance at all
Communicator(const Communicator &)
static Channel * recv_init(int count, int idir, int ipm)
static int broadcast(size_t size, void *data, int sender)
static int ipe(const int dir)
logical coordinate of current proc.
Channel class for asynchronous communication.
static int finalize()
finalize communicator
static int send_1to1(int count, double *recv_buf, double *send_buf, int p_to, int p_from, int tag)
send array of double from rank p_from to rank p_to. communication distinguished by tag...
static int exchange(size_t size, void *recv_buf, void *send_buf, int idir, int ipm, int tag)
static int grid_dims(int *grid_dims)
find grid dimensions.
static int exchange(int count, double *recv_buf, double *send_buf, int idir, int ipm, int tag)
receive array of double from upstream specified by idir and ipm, and send array to downstream...
static int grid_rank(int *rank, const int *grid_coord)
find rank number from grid coordinate.
static int setup(int ninstance=1)
setup communicator
static int sync_usleep()
synchronize within small world. (slow but no busy wait)
static int send_1to1(size_t size, void *recv_buf, void *send_buf, int send_to, int recv_from, int tag)
static int size()
size of small world.
static double get_time()
obtain a wall-clock time.
static Channel * send_init(int count, int idir, int ipm)
static int reduce_sum(int count, double *recv_buf, double *send_buf, int pattern=0)
make a global sum of an array of double over the communicator. pattern specifies the dimensions to be...
static int sync()
synchronize within small world.
Communicator & operator=(const Communicator &)
static int broadcast(int count, double *data, int sender)
broadcast array of double from sender.
static int nodeid()
alternative name for self().
static bool is_primary()
check if the present node is primary in small communicator.