| 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 |