*
* Input: none
* Output: process ranks in file "testfile"
*
* Note: Link with cio.o
*
* See Chap 8, p. 157 in PPMPI
*/
#include
#include "mpi.h"
#include "cio.h"
#define MAX 32
FILE* Cfopen(
char* filename /* in */,
char* mode /* in */,
MPI_Comm io_comm /* in */);
main(int argc, char* argv[]) {
int p;
int my_rank;
int io_rank;
int list[MAX];
MPI_Comm io_comm;
int i;
FILE* fp;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &p);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_dup(MPI_COMM_WORLD, &io_comm);
Cache_io_rank(MPI_COMM_WORLD, io_comm);
fp = Cfopen("testfile", "w", io_comm);
Get_io_rank(io_comm, &io_rank);
MPI_Gather(&my_rank, 1, MPI_INT, list, 1, MPI_INT,
io_rank, io_comm);
if (my_rank == io_rank) {
for (i = 0; i < p; i++)
fprintf(fp,"%d ", list[i]);
fprintf(fp,"\n");
fclose(fp);
}
MPI_Finalize();
} /* main */
/************************************************************/
FILE* Cfopen(
char* filename /* in */,
char* mode /* in */,
MPI_Comm io_comm /* in */) {
int root;
int my_io_rank;
FILE* fp;
Get_io_rank(io_comm, &root);
MPI_Comm_rank(io_comm, &my_io_rank);
if (my_io_rank == root) {
fp = fopen(filename, mode);
return fp;
} else {
return NULL;
}
} /* Cfopen */
Hiç yorum yok:
Yorum Gönder