11 static int is_initialized;
21 rtc = MPI_Comm_rank(comm, rank);
23 if (rtc != MPI_SUCCESS) {
40 rtc = MPI_Comm_size(comm, size);
42 if (rtc != MPI_SUCCESS) {
59 rtc = MPI_Comm_dup(comm, new_comm);
61 if (rtc != MPI_SUCCESS) {
78 rtc = MPI_Comm_free(comm);
80 if (rtc != MPI_SUCCESS) {
98 rtc = MPI_Barrier(comm);
100 if (rtc != MPI_SUCCESS) {
117 rtc = MPI_Wait(array_of_requests, array_of_statuses);
119 if (rtc != MPI_SUCCESS) {
136 rtc = MPI_Waitall(count, array_of_requests, array_of_statuses);
138 if (rtc != MPI_SUCCESS) {
157 rtc = MPI_Bcast(buffer, count, MPI_INT, root, comm);
159 if (rtc != MPI_SUCCESS) {
165 rtc = MPI_Bcast(buffer, count, MPI_DOUBLE, root, comm);
167 if (rtc != MPI_SUCCESS) {
173 rtc = MPI_Bcast(buffer, count, MPI_CHAR, root, comm);
175 if (rtc != MPI_SUCCESS) {
181 rtc = MPI_Bcast(buffer, count, MPI_LONG_LONG, root, comm);
183 if (rtc != MPI_SUCCESS) {
207 rtc = MPI_Send(buffer, count, MPI_INT, dest, tag, comm);
209 if (rtc != MPI_SUCCESS) {
215 rtc = MPI_Send(buffer, count, MPI_DOUBLE, dest, tag, comm);
217 if (rtc != MPI_SUCCESS) {
223 rtc = MPI_Send(buffer, count, MPI_CHAR, dest, tag, comm);
225 if (rtc != MPI_SUCCESS) {
231 rtc = MPI_Send(buffer, count, MPI_LONG_LONG, dest, tag, comm);
233 if (rtc != MPI_SUCCESS) {
258 rtc = MPI_Recv(buffer, count, MPI_INT, source, tag, comm, status);
260 if (rtc != MPI_SUCCESS) {
266 rtc = MPI_Recv(buffer, count, MPI_DOUBLE, source, tag, comm, status);
268 if (rtc != MPI_SUCCESS) {
274 rtc = MPI_Recv(buffer, count, MPI_CHAR, source, tag, comm, status);
276 if (rtc != MPI_SUCCESS) {
282 rtc = MPI_Recv(buffer, count, MPI_LONG_LONG, source, tag, comm, status);
284 if (rtc != MPI_SUCCESS) {
309 rtc = MPI_Isend(buffer, count, MPI_INT, dest, tag, comm, request);
311 if (rtc != MPI_SUCCESS) {
317 rtc = MPI_Isend(buffer, count, MPI_DOUBLE, dest, tag, comm, request);
319 if (rtc != MPI_SUCCESS) {
325 rtc = MPI_Isend(buffer, count, MPI_CHAR, dest, tag, comm, request);
327 if (rtc != MPI_SUCCESS) {
333 rtc = MPI_Isend(buffer, count, MPI_LONG_LONG, dest, tag, comm, request);
335 if (rtc != MPI_SUCCESS) {
360 rtc = MPI_Irecv(buffer, count, MPI_INT, source, tag, comm, request);
362 if (rtc != MPI_SUCCESS) {
368 rtc = MPI_Irecv(buffer, count, MPI_DOUBLE, source, tag, comm, request);
370 if (rtc != MPI_SUCCESS) {
376 rtc = MPI_Irecv(buffer, count, MPI_CHAR, source, tag, comm, request);
378 if (rtc != MPI_SUCCESS) {
384 rtc = MPI_Irecv(buffer, count, MPI_LONG_LONG, source, tag, comm, request);
386 if (rtc != MPI_SUCCESS) {
408 MPI_Datatype _datatype;
416 _datatype = MPI_DOUBLE;
419 _datatype = MPI_CHAR;
422 _datatype = MPI_LONG_LONG;
443 rtc = MPI_Allreduce(sendbuf, recvbuf, count, _datatype, _op, comm);
445 if (rtc != MPI_SUCCESS) {
456 memcpy(recvbuf, sendbuf,
sizeof(
int) * count);
459 memcpy(recvbuf, sendbuf,
sizeof(
double) * count);
462 memcpy(recvbuf, sendbuf,
sizeof(
char) * count);
465 memcpy(recvbuf, sendbuf,
sizeof(
long long) * count);
483 MPI_Datatype _sendtype, _recvtype;
490 _sendtype = MPI_DOUBLE;
493 _sendtype = MPI_CHAR;
496 _sendtype = MPI_LONG_LONG;
507 _recvtype = MPI_DOUBLE;
510 _recvtype = MPI_CHAR;
513 _recvtype = MPI_LONG_LONG;
520 rtc = MPI_Allgather(sendbuf, sendcount, _sendtype, recvbuf, recvcount,
523 if (rtc != MPI_SUCCESS) {
540 rtc = MPI_Group_incl(group, n, ranks, newgroup);
542 if (rtc != MPI_SUCCESS) {
559 rtc = MPI_Group_excl(group, n, ranks, newgroup);
561 if (rtc != MPI_SUCCESS) {
578 rtc = MPI_Comm_create(comm, group, comm_out);
580 if (rtc != MPI_SUCCESS) {
596 rtc = MPI_Group_rank(group, rank);
598 if (rtc != MPI_SUCCESS) {
615 rtc = MPI_Group_size(group, size);
617 if (rtc != MPI_SUCCESS) {
634 rtc = MPI_Comm_group(comm, group);
636 if (rtc != MPI_SUCCESS) {
649 static int check_is_initialized(
void) {
654 if (!is_initialized) {
662 static int setup_comm(
void) {
665 if (MPI_Comm_dup(MPI_COMM_WORLD, &hecmw_comm) != MPI_SUCCESS) {
676 static int setup_comm_size(
void) {
679 if (MPI_Comm_size(MPI_COMM_WORLD, &comm_size) != MPI_SUCCESS) {
690 static int setup_comm_rank(
void) {
693 if (MPI_Comm_rank(MPI_COMM_WORLD, &comm_rank) != MPI_SUCCESS) {
704 static int setup_comm_group(
void) {
707 if (MPI_Comm_group(MPI_COMM_WORLD, &hecmw_group) != MPI_SUCCESS) {
721 if (MPI_Init(argc, argv) != MPI_SUCCESS) {
734 if (setup_comm_size()) {
738 if (setup_comm_rank()) {
742 if (setup_comm_group()) {
752 return check_is_initialized() ? hecmw_comm : (
HECMW_Comm)-1;
756 return check_is_initialized() ? comm_size : -1;
760 return check_is_initialized() ? comm_rank : -1;
764 return check_is_initialized() ? hecmw_group : (
HECMW_Group)-1;
769 return MPI_Comm_c2f(comm);
777 return MPI_Comm_f2c(comm);
785 return MPI_Group_f2c(group);
int HECMW_Comm_create(HECMW_Comm comm, HECMW_Group group, HECMW_Comm *comm_out)
int HECMW_Comm_rank(HECMW_Comm comm, int *rank)
int HECMW_Irecv(void *buffer, int count, HECMW_Datatype datatype, int source, int tag, HECMW_Comm comm, HECMW_Request *request)
void hecmw_comm_init_if__(HECMW_Fint *comm, int *size, int *rank, HECMW_Fint *group)
int HECMW_Isend(void *buffer, int count, HECMW_Datatype datatype, int dest, int tag, HECMW_Comm comm, HECMW_Request *request)
void hecmw_comm_init_if_(HECMW_Fint *comm, int *size, int *rank, HECMW_Fint *group)
int HECMW_Waitall(int count, HECMW_Request *array_of_requests, HECMW_Status *array_of_statuses)
HECMW_Fint HECMW_Comm_c2f(HECMW_Comm comm)
int HECMW_comm_init(int *argc, char ***argv)
HECMW_Comm HECMW_comm_get_comm(void)
int HECMW_Group_size(HECMW_Group group, int *size)
int HECMW_Comm_size(HECMW_Comm comm, int *size)
int HECMW_Group_excl(HECMW_Group group, int n, int *ranks, HECMW_Group *newgroup)
int HECMW_Allreduce(void *sendbuf, void *recvbuf, int count, HECMW_Datatype datatype, HECMW_Op op, HECMW_Comm comm)
int HECMW_comm_get_rank(void)
int HECMW_Send(void *buffer, int count, HECMW_Datatype datatype, int dest, int tag, HECMW_Comm comm)
int HECMW_Barrier(HECMW_Comm comm)
int HECMW_Recv(void *buffer, int count, HECMW_Datatype datatype, int source, int tag, HECMW_Comm comm, HECMW_Status *status)
HECMW_Group HECMW_Group_f2c(HECMW_Fint group)
void hecmw_comm_init_if(HECMW_Fint *comm, int *size, int *rank, HECMW_Fint *group)
int HECMW_Comm_free(HECMW_Comm *comm)
int HECMW_comm_get_size(void)
int HECMW_Comm_group(HECMW_Comm comm, HECMW_Group *group)
HECMW_Group HECMW_comm_get_group(void)
void HECMW_COMM_INIT_IF(HECMW_Fint *comm, int *size, int *rank, HECMW_Fint *group)
int HECMW_Group_rank(HECMW_Group group, int *rank)
int HECMW_comm_is_initialized(void)
HECMW_Comm HECMW_Comm_f2c(HECMW_Fint comm)
int HECMW_Group_incl(HECMW_Group group, int n, int *ranks, HECMW_Group *newgroup)
int HECMW_Wait(HECMW_Request *array_of_requests, HECMW_Status *array_of_statuses)
int HECMW_Allgather(void *sendbuf, int sendcount, HECMW_Datatype sendtype, void *recvbuf, int recvcount, HECMW_Datatype recvtype, HECMW_Comm comm)
int HECMW_Comm_dup(HECMW_Comm comm, HECMW_Comm *new_comm)
int HECMW_Bcast(void *buffer, int count, HECMW_Datatype datatype, int root, HECMW_Comm comm)
MPI_Datatype HECMW_Datatype
MPI_Request HECMW_Request
int HECMW_set_error(int errorno, const char *fmt,...)
int HECMW_log(int loglv, const char *fmt,...)