#include "mpi.h" int main( int argc, char *argv[] ) { int gsizes[2], distribs[2], dargs[2], psizes[2], rank, size, m, n; MPI_Datatype filetype; int i,j; MPI_File fh; int *local_array; MPI_Status status; MPI_Init( &argc, &argv ); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size( MPI_COMM_WORLD, &size ); local_array = (int *)malloc( 2 * 2 * sizeof(int) ); for (i=0;i<2;i++) { for (j=0;j<2;j++) { local_array[i,j] = rank * 100000 + (i+1)*1000 + (j+1); } } gsizes[0] = 4; gsizes[1] = 4; distribs[0] = MPI_DISTRIBUTE_BLOCK; distribs[1] = MPI_DISTRIBUTE_BLOCK; dargs[0] = MPI_DISTRIBUTE_DFLT_DARG; dargs[1] = MPI_DISTRIBUTE_DFLT_DARG; psizes[0] = 2; psizes[1] = 2; MPI_Type_create_darray(4, rank, 2, gsizes, distribs, dargs, psizes, MPI_ORDER_C, MPI_INT, &filetype); MPI_Type_commit(&filetype); MPI_File_open(MPI_COMM_WORLD, "datafile_c", MPI_MODE_CREATE | MPI_MODE_WRONLY, MPI_INFO_NULL, &fh); MPI_File_set_view(fh, 0, MPI_INT, filetype, "native", MPI_INFO_NULL); MPI_File_write_all(fh, local_array, 4, MPI_INT, &status); MPI_File_close(&fh); MPI_Finalize(); return 0; }