Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * main.c
- *
- * Created on: Dec 9, 2015
- * Author: student
- */
- #include "mpi.h"
- #include <stdio.h>
- #include <string.h>
- int main(int argc, char *argv[])
- {
- int my_rank;
- int count;
- MPI_Status status;
- MPI_Comm cart;
- int n =4;
- int dim[2] = {n,n};
- int perioade[2] = {1,1};
- int coord[2];
- int sus,jos,stanga,dreapta;
- int m1, m2,m3;
- int a[4][4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
- int b[4][4] ={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
- int c[4][4];
- int k;
- MPI_Init(&argc, &argv);
- MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
- MPI_Comm_size(MPI_COMM_WORLD, &count);
- MPI_Cart_create(MPI_COMM_WORLD, 2, dim, perioade, 0, &cart);
- MPI_Cart_coords(cart, my_rank, 2, coord);
- MPI_Cart_shift(cart, 0, 1, &sus, &jos);
- MPI_Cart_shift(cart, 1, 1, &stanga, &dreapta);
- m1= a[coord[0]][coord[1]];
- m2= b[coord[0]][coord[1]];
- for(k=1;k<=coord[0];k++)
- {
- MPI_Send(&m1, 1, MPI_INT, stanga, 99, cart);
- MPI_Recv(&m1, 1, MPI_INT, dreapta, 99, cart, &status);
- }
- for(k=1;k<=coord[1];k++)
- {
- MPI_Send(&m2, 1, MPI_INT, sus, 99, cart);
- MPI_Recv(&m2, 1, MPI_INT, jos, 99, cart, &status);
- }
- m3=0;
- for(k=0;k<n - 1 ; k++){
- m3+= (m1*m2);
- MPI_Send(&m1, 1, MPI_INT, stanga, 99, cart);
- MPI_Recv(&m1, 1, MPI_INT, dreapta, 99, cart, &status);
- MPI_Send(&m2, 1, MPI_INT, sus, 99, cart);
- MPI_Recv(&m2, 1, MPI_INT, jos, 99, cart, &status);
- }
- c[coord[0]][coord[1]] = m3 + (m1*m2);
- printf("c[%d][%d] = %d\n",coord[0],coord[1],c[coord[0]][coord[1]] );
- MPI_Comm_free(&cart);
- MPI_Finalize();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment