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) {
199 rtc = MPI_Send(buffer, count, MPI_INT, dest, tag, comm);
201 if (rtc != MPI_SUCCESS) {
207 rtc = MPI_Send(buffer, count, MPI_DOUBLE, dest, tag, comm);
209 if (rtc != MPI_SUCCESS) {
215 rtc = MPI_Send(buffer, count, MPI_CHAR, dest, tag, comm);
217 if (rtc != MPI_SUCCESS) {
242 rtc = MPI_Recv(buffer, count, MPI_INT, source, tag, comm, status);
244 if (rtc != MPI_SUCCESS) {
250 rtc = MPI_Recv(buffer, count, MPI_DOUBLE, source, tag, comm, status);
252 if (rtc != MPI_SUCCESS) {
258 rtc = MPI_Recv(buffer, count, MPI_CHAR, source, tag, comm, status);
260 if (rtc != MPI_SUCCESS) {
285 rtc = MPI_Isend(buffer, count, MPI_INT, dest, tag, comm, request);
287 if (rtc != MPI_SUCCESS) {
293 rtc = MPI_Isend(buffer, count, MPI_DOUBLE, dest, tag, comm, request);
295 if (rtc != MPI_SUCCESS) {
301 rtc = MPI_Isend(buffer, count, MPI_CHAR, dest, tag, comm, request);
303 if (rtc != MPI_SUCCESS) {
328 rtc = MPI_Irecv(buffer, count, MPI_INT, source, tag, comm, request);
330 if (rtc != MPI_SUCCESS) {
336 rtc = MPI_Irecv(buffer, count, MPI_DOUBLE, source, tag, comm, request);
338 if (rtc != MPI_SUCCESS) {
344 rtc = MPI_Irecv(buffer, count, MPI_CHAR, source, tag, comm, request);
346 if (rtc != MPI_SUCCESS) {
368 MPI_Datatype _datatype;
376 _datatype = MPI_DOUBLE;
379 _datatype = MPI_CHAR;
400 rtc = MPI_Allreduce(sendbuf, recvbuf, count, _datatype, _op, comm);
402 if (rtc != MPI_SUCCESS) {
413 memcpy(recvbuf, sendbuf,
sizeof(
int) * count);
416 memcpy(recvbuf, sendbuf,
sizeof(
double) * count);
419 memcpy(recvbuf, sendbuf,
sizeof(
char) * count);
437 MPI_Datatype _sendtype, _recvtype;
444 _sendtype = MPI_DOUBLE;
447 _sendtype = MPI_CHAR;
458 _recvtype = MPI_DOUBLE;
461 _recvtype = MPI_CHAR;
468 rtc = MPI_Allgather(sendbuf, sendcount, _sendtype, recvbuf, recvcount,
471 if (rtc != MPI_SUCCESS) {
488 rtc = MPI_Group_incl(group, n, ranks, newgroup);
490 if (rtc != MPI_SUCCESS) {
507 rtc = MPI_Group_excl(group, n, ranks, newgroup);
509 if (rtc != MPI_SUCCESS) {
526 rtc = MPI_Comm_create(comm, group, comm_out);
528 if (rtc != MPI_SUCCESS) {
544 rtc = MPI_Group_rank(group, rank);
546 if (rtc != MPI_SUCCESS) {
563 rtc = MPI_Group_size(group, size);
565 if (rtc != MPI_SUCCESS) {
582 rtc = MPI_Comm_group(comm, group);
584 if (rtc != MPI_SUCCESS) {
597 static int check_is_initialized(
void) {
602 if (!is_initialized) {
610 static int setup_comm(
void) {
613 if (MPI_Comm_dup(MPI_COMM_WORLD, &hecmw_comm) != MPI_SUCCESS) {
624 static int setup_comm_size(
void) {
627 if (MPI_Comm_size(MPI_COMM_WORLD, &comm_size) != MPI_SUCCESS) {
638 static int setup_comm_rank(
void) {
641 if (MPI_Comm_rank(MPI_COMM_WORLD, &comm_rank) != MPI_SUCCESS) {
652 static int setup_comm_group(
void) {
655 if (MPI_Comm_group(MPI_COMM_WORLD, &hecmw_group) != MPI_SUCCESS) {
669 if (MPI_Init(argc, argv) != MPI_SUCCESS) {
682 if (setup_comm_size()) {
686 if (setup_comm_rank()) {
690 if (setup_comm_group()) {
700 return check_is_initialized() ? hecmw_comm : (
HECMW_Comm)-1;
704 return check_is_initialized() ? comm_size : -1;
708 return check_is_initialized() ? comm_rank : -1;
712 return check_is_initialized() ? hecmw_group : (
HECMW_Group)-1;
717 return MPI_Comm_c2f(comm);
725 return MPI_Comm_f2c(comm);
733 return MPI_Group_f2c(group);