/* Copyright 2004 David A. Joiner and the Shodor Education Foundation, Inc. * * / #include #include #define MATRIX_SIZE_MAX 10 int main(int argc,char ** argv) { int A[MATRIX_SIZE_MAX][MATRIX_SIZE_MAX]; int matrix_size=6; MPI_Datatype partial_array; int rank,size; MPI_Status status; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); if (size<2) { printf("Error, at least 2 processes needed\n"); exit(0); } if (matrix_size>MATRIX_SIZE_MAX) { printf("Error, matrix is larger than maximum allocation\n"); exit(0); } MPI_Type_vector(matrix_size, matrix_size/2, MATRIX_SIZE_MAX, MPI_INT, &partial_array); /* MPI_Type_vector ( int count, int block_length, * int stride, MPI_Datatype oldtype, MPI_Datatype * newtype); * * define "count" segments, with "block_length" items per segment, * spaced "stride" apart, of type oldtype as newtype */ MPI_Type_commit(&partial_array); /* commit datatype so that it can be used in sends and receives */ if (rank == 0) { int i,j; // server - initialize data and send for (i = 0; i< matrix_size; i++) { for (j=0;j