306 |
|
} |
307 |
|
|
308 |
|
const int masterNode = 0; |
309 |
< |
|
309 |
> |
int nProc; |
310 |
> |
MPI_Comm_size(MPI_COMM_WORLD, &nProc); |
311 |
|
if (worldRank == masterNode) { |
312 |
|
os << " <Snapshot>\n"; |
313 |
|
writeFrameProperties(os, info_->getSnapshotManager()->getCurrentSnapshot()); |
315 |
|
|
316 |
|
os << buffer; |
317 |
|
|
318 |
< |
int nProc; |
318 |
< |
MPI_Comm_size(MPI_COMM_WORLD, &nProc); |
318 |
> |
|
319 |
|
for (int i = 1; i < nProc; ++i) { |
320 |
|
|
321 |
|
// receive the length of the string buffer that was |
322 |
|
// prepared by processor i |
323 |
< |
|
323 |
> |
|
324 |
> |
MPI_Bcast(&i, 1, MPI_INT,masterNode,MPI_COMM_WORLD); |
325 |
|
int recvLength; |
326 |
|
MPI_Recv(&recvLength, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &istatus); |
327 |
|
char* recvBuffer = new char[recvLength]; |
338 |
|
os.flush(); |
339 |
|
} else { |
340 |
|
int sendBufferLength = buffer.size() + 1; |
341 |
< |
MPI_Send(&sendBufferLength, 1, MPI_INT, masterNode, 0, MPI_COMM_WORLD); |
342 |
< |
MPI_Send((void *)buffer.c_str(), sendBufferLength, MPI_CHAR, masterNode, 0, MPI_COMM_WORLD); |
341 |
> |
int myturn = 0; |
342 |
> |
for (int i = 1; i < nProc; ++i){ |
343 |
> |
MPI_Bcast(&myturn,1, MPI_INT,masterNode,MPI_COMM_WORLD); |
344 |
> |
if (myturn == worldRank){ |
345 |
> |
MPI_Send(&sendBufferLength, 1, MPI_INT, masterNode, 0, MPI_COMM_WORLD); |
346 |
> |
MPI_Send((void *)buffer.c_str(), sendBufferLength, MPI_CHAR, masterNode, 0, MPI_COMM_WORLD); |
347 |
> |
} |
348 |
> |
} |
349 |
|
} |
350 |
|
|
351 |
|
#endif // is_mpi |