Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. #include "mpi.h"
  2. #include <iostream>
  3. #include <math.h>
  4.  
  5. const int Tag = 0;
  6. const int TagSecond = 1;
  7. const int root = 0;
  8.  
  9. double composition_array(int begin, int end) {
  10. double composition = 1;
  11. for (int i = begin; i < end; ++i) {
  12. composition *= 1 + 1 / (i * log(i));
  13. // std::cout << 1 + 1 / (i * log(i)) << " ";
  14. }
  15. // std::cout << std::endl;
  16. return composition;
  17. }
  18. int main() {
  19. int rank, comm_size;
  20. MPI_Init(NULL, NULL);
  21. MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  22. MPI_Comm_size(MPI_COMM_WORLD, &comm_size);
  23. double *arr;
  24. double composition = 1;
  25. double buffer;
  26. int part_size;
  27. int begin, end;
  28. int n;
  29. MPI_Status status;
  30. if (root == rank) {
  31. std::cout << "n : ";
  32. std::cin >> n;
  33. n -= 1;
  34. part_size = n / comm_size;
  35. for (int i = root + 1; i < comm_size; ++i) {
  36. MPI_Send(&part_size, 1, MPI_INT, i, TagSecond, MPI_COMM_WORLD);
  37. }
  38. int shift = n % comm_size;
  39. int send_message;
  40. // std::cout << "'''''''''''''''''''''''" << std::endl;
  41. // std::cout << shift << " " << part_size << std::endl;
  42. // std::cout << "iiiiiiiiiiiiiiiiiiiiiiii" << std::endl;
  43. for (int i = root + 1; i < comm_size; ++i) {
  44. send_message = 2 + shift + part_size * i;
  45. MPI_Send(&send_message, 1, MPI_INT, i, Tag, MPI_COMM_WORLD);
  46. }
  47. // std::cout << rank << " : ";
  48. composition = composition_array(2, 2 + shift + part_size);
  49. for (int i = root + 1; i < comm_size; ++i) {
  50. MPI_Recv(&buffer, 1, MPI_DOUBLE, i, Tag, MPI_COMM_WORLD, &status);
  51. composition *= buffer;
  52. }
  53.  
  54. } else {
  55. // MPI_Probe(root, Tag2, MPI_COMM_WORLD, &status);
  56. MPI_Recv(&part_size, 1, MPI_INT, root, TagSecond, MPI_COMM_WORLD, &status);
  57. MPI_Recv(&begin, 1, MPI_INT, root, Tag, MPI_COMM_WORLD, &status);
  58. // std::cout << part_size << std::endl;
  59. // std::cout << rank << " : ";
  60. double composition_tmp = composition_array(begin, begin + part_size);
  61. std::cout << begin << " " << part_size << std::endl;
  62. MPI_Send(&composition_tmp, 1, MPI_DOUBLE, root, Tag, MPI_COMM_WORLD);
  63. }
  64.  
  65. if (rank == 0) {
  66. std::cout << rank << " : " << composition << std::endl;
  67. }
  68. MPI_Finalize();
  69. return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement