Advertisement
Guest User

Untitled

a guest
Dec 12th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. #include <mpi.h>
  2. #include <stdio.h>
  3.  
  4. /**
  5. * @author cristian.chilipirea
  6. * Run: mpirun -np 4 ./a.out
  7. */
  8.  
  9. int mat[15][15] = {{0,1,1,0,0,0,0,0,0,0,0,0,0,0,0},
  10. {1,0,0,1,1,1,0,0,0,0,0,0,0,0,0},
  11. {1,0,0,0,0,0,1,1,0,0,0,0,0,0,0},
  12. {0,1,0,0,0,0,0,0,1,0,0,0,0,0,0},
  13. {0,1,0,0,0,0,0,0,0,0,0,0,0,0,0},
  14. {0,1,0,0,0,0,0,0,0,1,1,0,0,0,0},
  15. {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0},
  16. {0,0,1,0,0,0,0,0,0,0,0,1,1,0,0},
  17. {0,0,0,1,0,0,0,0,0,0,0,0,0,0,0},
  18. {0,0,0,0,0,1,0,0,0,0,0,0,0,1,0},
  19. {0,0,0,0,0,1,0,0,0,0,0,0,0,0,0},
  20. {0,0,0,0,0,0,0,1,0,0,0,0,0,0,1},
  21. {0,0,0,0,0,0,0,1,0,0,0,0,0,0,0},
  22. {0,0,0,0,0,0,0,0,0,1,0,0,0,0,0},
  23. {0,0,0,0,0,0,0,0,0,0,0,1,0,0,0}
  24. };
  25.  
  26. int main(int argc, char * argv[]) {
  27. int rank;
  28. int nProcesses;
  29. int level, tag = 1, i, j, k, source;
  30. int recvmat[15][15];
  31.  
  32. MPI_Init(&argc, &argv);
  33. MPI_Status status;
  34. MPI_Request request;
  35.  
  36. MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  37. MPI_Comm_size(MPI_COMM_WORLD, &nProcesses);
  38.  
  39. for (i = 0 ; i < 15; i++) {
  40. if (i != rank) {
  41. for (j = 0; j < 15; j++) {
  42. mat[i][j] = 0;
  43. }
  44. }
  45. }
  46.  
  47. if (rank == 0) {
  48. level = 0;
  49.  
  50. MPI_Send(&level, 1, MPI_INT, 1, tag, MPI_COMM_WORLD);
  51. MPI_Send(&level, 1, MPI_INT, 2, tag, MPI_COMM_WORLD);
  52.  
  53. // tre' sa primeasca
  54.  
  55. MPI_Recv(&recvmat, 225, MPI_INT, 1, tag, MPI_COMM_WORLD, &status);
  56. for (j = 0; j < 15; j++) {
  57. for (k =0 ; k < 15; k++) {
  58. if (recvmat[j][k] == 1) {
  59. mat[j][k] = 1;
  60. }
  61. }
  62. }
  63.  
  64. MPI_Recv(&recvmat, 225, MPI_INT, 2, tag, MPI_COMM_WORLD, &status);
  65. for (j = 0; j < 15; j++) {
  66. for (k =0 ; k < 15; k++) {
  67. if (recvmat[j][k] == 1) {
  68. mat[j][k] = 1;
  69. }
  70. }
  71. }
  72.  
  73. for (j = 0; j < 15; j++) {
  74. for (k =0 ; k < 15; k++) {
  75. printf("%d ", mat[j][k]);
  76. }
  77. printf("\n");
  78. }
  79. }
  80. else {
  81. MPI_Recv(&level, 1, MPI_INT, MPI_ANY_SOURCE, tag, MPI_COMM_WORLD, &status);
  82. source = status.MPI_SOURCE;
  83. printf("%d a primit nivelul %d de la %d\n", rank, level, source);
  84.  
  85. level++;
  86.  
  87. for (i = 0 ; i < 15; i++) {
  88. if (mat[rank][i] != 0 && i != source) {
  89. MPI_Send(&level, 1, MPI_INT, i, tag, MPI_COMM_WORLD);
  90. }
  91. }
  92.  
  93. for (i = 0 ; i < 15; i++) {
  94. if (mat[rank][i] != 0 && i != source) {
  95. MPI_Recv(&recvmat, 225, MPI_INT, i, tag, MPI_COMM_WORLD, &status);
  96.  
  97. for (j = 0; j < 15; j++) {
  98. for (k =0 ; k < 15; k++) {
  99. if (recvmat[j][k] == 1) {
  100. mat[j][k] = 1;
  101. }
  102. }
  103.  
  104. }
  105. }
  106. }
  107. MPI_Send(&mat, 225, MPI_INT, source, tag, MPI_COMM_WORLD);
  108. }
  109.  
  110. MPI_Finalize();
  111. return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement