Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.30 KB | None | 0 0
  1. #include <mpi.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <time.h>
  6. #include <unistd.h>
  7.  
  8. #define N 10
  9. int main(int argc, char **argv) {
  10. int rank, i, p, q, minLoc = 9999999, minGlobal = 9999999;
  11. int *tab_org, *tab_cpy, *tab_mins;
  12. MPI_Init(&argc, &argv);
  13. MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  14. MPI_Comm_size(MPI_COMM_WORLD, &p);
  15. q = N / p;
  16. srand(time(NULL));
  17. if (rank == 0) {
  18. tab_org = malloc(sizeof(int) * N);
  19. for (i = 0; i < N; i++) {
  20. tab_org[i] = rand() % 30;
  21. printf("%d\n", tab_org[i]);
  22. }
  23. tab_mins = malloc(sizeof(int) * p);
  24. for (i = 0; i < p; i++) {
  25. MPI_Send(tab_org + i * q, q, MPI_INT, i, 1, MPI_COMM_WORLD);
  26. }
  27. }
  28. tab_cpy = malloc(sizeof(int) * q);
  29. MPI_Recv(tab_cpy, q, MPI_INT, 0, 1, MPI_COMM_WORLD, NULL);
  30. for (i = 0; i < q; i++) {
  31. if (minLoc > tab_cpy[i])
  32. minLoc = tab_cpy[i];
  33. }
  34. MPI_Send(&minLoc, 1, MPI_INT, 0, 2, MPI_COMM_WORLD);
  35. if (rank == 0) {
  36. for (i = 0; i < p; i++) {
  37. MPI_Recv(&tab_mins[i], 1, MPI_INT, i, 2, MPI_COMM_WORLD, NULL);
  38. if (minGlobal > tab_mins[i]) {
  39. minGlobal = tab_mins[i];
  40. }
  41. }
  42. }
  43. MPI_Bcast(&minGlobal, 1, MPI_INT, 0, MPI_COMM_WORLD);
  44. printf("WYNIK : %d\n", minGlobal);
  45. MPI_Finalize();
  46. return EXIT_SUCCESS;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement