#include #include #include #include "mpi.h" #include "mpi_bnc.h" #define DIM 10 int main(int argc, char *argv[]) { DVector c, x, b; DVector local_c, local_x, local_b; long int d_dim[10]; long int i, j, local_dim; int myrank, num_procs; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); MPI_Comm_size(MPI_COMM_WORLD, &num_procs); local_dim = _mpi_divide_dim(d_dim, DIM, num_procs); if(myrank == 0) { x = init_dvector(local_dim * num_procs); b = init_dvector(local_dim * num_procs); c = init_dvector(local_dim * num_procs); for(i = 0; i < DIM; i++) { set_dvector_i(x, i, (double)(i + 1)); set_dvector_i(b, i, (double)(DIM - i)); } } local_x = _mpi_init_dvector(d_dim, DIM, MPI_COMM_WORLD); local_b = _mpi_init_dvector(d_dim, DIM, MPI_COMM_WORLD); local_c = _mpi_init_dvector(d_dim, DIM, MPI_COMM_WORLD); _mpi_divide_dvector(local_b, d_dim, b, MPI_COMM_WORLD); _mpi_divide_dvector(local_x, d_dim, x, MPI_COMM_WORLD); add_dvector(local_c, local_x, local_b); _mpi_collect_dvector(c, d_dim, local_c, MPI_COMM_WORLD); _mpi_free_dvector(local_x); _mpi_free_dvector(local_b); _mpi_free_dvector(local_c); /* free */ if(myrank == 0) { print_dvector(c); free_dvector(x); free_dvector(b); free_dvector(c); } MPI_Finalize(); return EXIT_SUCCESS; }