24 #define REAL_MPI_TYPE MPI_FLOAT
26 #define REAL_MPI_TYPE MPI_DOUBLE
57 char* timeString = ctime(&t);
58 timeString[24] =
'\0';
59 fprintf(
screenOut,
"%s: %s\n", timeString, msg);
67 MPI_Comm_rank(MPI_COMM_WORLD, &
myRank);
68 MPI_Comm_size(MPI_COMM_WORLD, &
nRanks);
82 MPI_Barrier(MPI_COMM_WORLD);
94 void* recvBuf,
int recvLen,
int source)
99 MPI_Sendrecv(sendBuf, sendLen, MPI_BYTE, dest, 0,
100 recvBuf, recvLen, MPI_BYTE, source, 0,
101 MPI_COMM_WORLD, &status);
102 MPI_Get_count(&status, MPI_BYTE, &bytesReceived);
104 return bytesReceived;
106 assert(source == dest);
107 memcpy(recvBuf, sendBuf, sendLen);
116 MPI_Allreduce(sendBuf, recvBuf, count, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
118 for (
int ii=0; ii<count; ++ii)
119 recvBuf[ii] = sendBuf[ii];
126 MPI_Allreduce(sendBuf, recvBuf, count, REAL_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD);
128 for (
int ii=0; ii<count; ++ii)
129 recvBuf[ii] = sendBuf[ii];
136 MPI_Allreduce(sendBuf, recvBuf, count, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
138 for (
int ii=0; ii<count; ++ii)
139 recvBuf[ii] = sendBuf[ii];
146 MPI_Allreduce(sendBuf, recvBuf, count, MPI_INT, MPI_MAX, MPI_COMM_WORLD);
148 for (
int ii=0; ii<count; ++ii)
149 recvBuf[ii] = sendBuf[ii];
157 MPI_Allreduce(sendBuf, recvBuf, count, MPI_DOUBLE_INT, MPI_MINLOC, MPI_COMM_WORLD);
159 for (
int ii=0; ii<count; ++ii)
161 recvBuf[ii].
val = sendBuf[ii].
val;
162 recvBuf[ii].
rank = sendBuf[ii].
rank;
170 MPI_Allreduce(sendBuf, recvBuf, count, MPI_DOUBLE_INT, MPI_MAXLOC, MPI_COMM_WORLD);
172 for (
int ii=0; ii<count; ++ii)
174 recvBuf[ii].
val = sendBuf[ii].
val;
175 recvBuf[ii].
rank = sendBuf[ii].
rank;
184 MPI_Bcast(buf, count, MPI_BYTE, root, MPI_COMM_WORLD);