Advertisement
Razzim

wspolbiezne lab4

Nov 9th, 2015
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <mpi.h>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char * argv[])
  7. {
  8. MPI_Init(&argc, &argv);
  9. int size;
  10. int rank;
  11. MPI_Status status;
  12. MPI_Comm_size(MPI_COMM_WORLD, &size);
  13. MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  14. MPI_Group grupaGlobalna;
  15.  
  16. MPI_Comm_group(MPI_COMM_WORLD, &grupaGlobalna);
  17.  
  18. MPI_Group grupaParzysta;
  19. MPI_Group grupaNieparzysta;
  20.  
  21. //nieparzyste
  22. int* np = new int[size/2];
  23. for (int i=0; i<(size/2); i++)
  24. np[i]=2*i+1;
  25.  
  26. //parzyste
  27. int r;
  28. if (size%2==1) r=(size/2)+1;
  29. else r=(size/2);
  30. int* p = new int[r];
  31. for (int i=0; i<(r); i++)
  32. p[i]=2*i;
  33.  
  34. MPI_Group_incl(grupaGlobalna, r, p, &grupaParzysta);
  35. MPI_Group_incl(grupaGlobalna, size/2, np, &grupaNieparzysta);
  36.  
  37. MPI_Comm komunikatorParzysty;
  38. MPI_Comm komunikatorNieparzysty;
  39.  
  40. MPI_Comm_create(MPI_COMM_WORLD, grupaParzysta, &komunikatorParzysty);
  41. MPI_Comm_create(MPI_COMM_WORLD, grupaNieparzysta, &komunikatorNieparzysty);
  42.  
  43. int suma=0;
  44. int op, onp;
  45. if (size%2==0)
  46. {
  47. op=size-2;
  48. onp=size-1;
  49. }
  50. else
  51. {
  52. op=size-1;
  53. onp=size-2;
  54. }
  55.  
  56. MPI_Reduce(&rank, &suma, 1, MPI_INT, MPI_SUM, size-1, MPI_COMM_WORLD);
  57. if (rank==size-1) cout<<"ID: "<<rank<<". Suma globalnych ID: "<<suma<<"."<<endl;
  58. suma=0;
  59. MPI_Reduce(&rank, &suma, 1, MPI_INT, MPI_SUM, op, komunikatorParzysty);
  60. if (rank==op) cout<<"ID: "<<rank<<". Suma parzystych ID: "<<suma<<"."<<endl;
  61.  
  62. MPI_Finalize();
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement