Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. int *index = new int[PR_count];
  2. int *count = new int[PR_count];
  3.  
  4. int rest_rows = size;
  5. int row_number = size / PR_count;
  6.  
  7. count[0] = row_number * size;
  8. index[0] = 0;
  9.  
  10. for (int i = 1; i < PR_count; i++)
  11. {
  12. rest_rows -= row_number;
  13. row_number = rest_rows / (PR_count - i);
  14. count[i] = row_number * size;
  15. index[i] = index[i - 1] + count[i - 1];
  16. }
  17.  
  18.  
  19. double *cur_row = new double[count[PR_rank]];
  20.  
  21. MPI_Scatterv(get_ptr(), count, index, MPI_DOUBLE, cur_row, count[PR_rank], MPI_DOUBLE, 0, MPI_COMM_WORLD);
  22.  
  23.  
  24. double *res_part = new double[count[PR_rank]];
  25.  
  26. for (int i = 0; i < count[PR_rank] / size; i++)
  27. {
  28. res_part[i] = 0;
  29.  
  30. for (int j = 0; j < size; j++)
  31. {
  32. res_part[i] += cur_row[j + i * size] * cur.get_ptr()[j];
  33. }
  34. }
  35.  
  36. double *res_row = new double[size];
  37.  
  38. for (int i = 0; i < PR_count; i++)
  39. {
  40. index[i] /= size;
  41. count[i] /= size;
  42. }
  43.  
  44. MPI_Allgatherv(res_part, count[PR_rank], MPI_DOUBLE, res_row, count, index, MPI_DOUBLE, MPI_COMM_WORLD);
  45.  
  46. Column result(size);
  47. for (int l = 0; l < size; ++l)
  48. {
  49. result.set(l, res_row[l]);
  50. }
  51.  
  52. delete[] index;
  53. delete[] cur_row;
  54. delete[] res_part;
  55. delete[] res_row;
  56. delete[] count;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement