#include #include #include #include #include #define DATASIZE 64 #define WRITER_ID 0 void mpiio_writer(int, int *, int); int main(int argc, char *argv[]) { int my_id, ntasks, i, localsize; int *localvector; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &ntasks); MPI_Comm_rank(MPI_COMM_WORLD, &my_id); if (ntasks > 64) { fprintf(stderr, "Datasize (64) should be divisible by number " "of tasks.\n"); MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE); } if (DATASIZE % ntasks != 0) { fprintf(stderr, "Datasize (64) should be divisible by number " "of tasks.\n"); MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE); } localsize = DATASIZE / ntasks; localvector = (int *) malloc(localsize * sizeof(int)); for (i = 0; i < localsize; i++) { localvector[i] = i + 1 + localsize * my_id; } mpiio_writer(my_id, localvector, localsize); free(localvector); MPI_Finalize(); return 0; } void mpiio_writer(int my_id, int *localvector, int localsize) { MPI_File fh; MPI_Offset offset; MPI_File_open(MPI_COMM_WORLD, "mpiio.dat", MPI_MODE_CREATE | MPI_MODE_WRONLY, MPI_INFO_NULL, &fh); offset = my_id * localsize * sizeof(int); MPI_File_write_at_all(fh, offset, localvector, localsize, MPI_INT, MPI_STATUS_IGNORE); MPI_File_close(&fh); }