Advertisement
Guest User

Untitled

a guest
Nov 16th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. //
  2. // main.cpp
  3. // AK
  4. //
  5. // Created by Irina Scherbitskaya on 11/16/18.
  6. // Copyright © 2018 Irina Scherbitskaya. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10.  
  11.  
  12. int* merge(int* arr1, int* arr2, int n1, int n2){
  13. int* ans = new int[n1+n2];
  14. int cur1 = 0, cur2 = 0;
  15. for(int i = 0; i < n1+n2; i++)
  16. if (arr1[cur1] < arr2[cur2]){
  17. ans[i] = arr1[cur1];
  18. cur1++;
  19. }
  20. else {
  21. ans[i] = arr2[cur2];
  22. cur2++;
  23. }
  24. return ans;
  25. }
  26.  
  27. int main(int argc, const char * argv[]) {
  28. int* array;
  29. int size;
  30. int rank = MPI::COMM_WORLD.Get_rank();
  31. int nthreat;
  32. int* current;
  33. int root = 0;
  34. int n1_size, n2_size;
  35. int* arr1, arr2;
  36. if (size % nthreat == 0)
  37. n1_size = n2_size = size/nthreat;
  38. else {
  39. n1_size = size/nthreat + 1;
  40. n2_size = (size/nthreat + 1)*nthreat - size;
  41. }
  42.  
  43. MPI::COMM_WORLD.Scatter(&values, n1_size, MPI::INT, &current, n1_size, MPI::INT, root);
  44. std::sort(current, current + n1_size);
  45. for (int i = 2; i < size; i*=2){
  46. if (rank % i == 0 && rank != nthreat - 1){
  47. int n2 = n1_size;
  48. MPI::COMM_WORLD.Recv(&arr1, n1_size, MPI::INT, rank, tag);
  49. if (rank + i/2 == nthreat - 1)
  50. n2 = n2_size;
  51. MPI::COMM_WORLD.Recv(&arr2, n2, MPI::INT, rank + i/2, tag);
  52. int* current merge(arr1, arr2, n1_size, n2)
  53. MPI::COMM_WORLD.Send(&current, n1_size+n2, MPI::INT, rank, tag);
  54. }
  55. MPI::COMM_WORLD.Barrier();
  56. }
  57. return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement