#include #include #define FILESIZE 4096 #define INTS_PER_BLK 16 int main(int argc, char **argv) { int *mydata, myrank, numprocs, numints; MPI_File fh; MPI_Datatype filetype; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); mydata = (int *) malloc(FILESIZE/numprocs); numints = FILESIZE/(sizeof(int)*numprocs); MPI_File_open(MPI_COMM_WORLD, "/work/datafile", MPI_MODE_RDONLY, MPI_INFO_NULL, &fh); MPI_Type_vector(numints/INTS_PER_BLK, INTS_PER_BLK, INTS_PER_BLK*numprocs, MPI_INT, &filetype); MPI_Type_commit(&filetype); MPI_File_set_view(fh, sizeof(int)*INTS_PER_BLK*myrank, MPI_INT, filetype, "native", MPI_INFO_NULL); MPI_File_read_all(fh, mydata, numints, MPI_INT, MPI_STATUS_IGNORE); MPI_File_close(&fh); MPI_Type_free(&filetype); free(mydata); MPI_Finalize(); return 0; }