Bu Blogda Ara

7 Şubat 2010 Pazar

open a file and write ints received from each process to it

/* cfopen.c -- open a file and write ints received from each process to it
*
* 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