fork download
  1. #include "mpi.h"
  2. #include <iostream>
  3. using namespace std;
  4. const int Tag = 0;
  5. const int root = 0;
  6. double sum_array(double *array, int n) {
  7. double sum = 0;
  8. for (int i = 0; i < n; ++i) {
  9. sum += array[i]; }
  10. return sum; }
  11. int main() {
  12. int rank, commSize;
  13. MPI_Init(NULL, NULL);
  14. MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  15. MPI_Comm_size(MPI_COMM_WORLD, &commSize);
  16. double *arr, sum = 0, buffer;
  17. int n;
  18. MPI_Status status;
  19. if (root == rank) {
  20. cout << "n : ";
  21. cin >> n;
  22. arr = new double[n];
  23. for (int i = 0; i < n; ++i)
  24. cin >> arr[i];
  25. int partSize = n/commSize;
  26. int shift = n%commSize;
  27. for (int i = root+1; i < commSize; ++i) {
  28. MPI_Send(arr + shift + partSize*i, partSize, MPI_DOUBLE, i, Tag,
  29. MPI_COMM_WORLD);}
  30. sum = sum_array(arr, shift + partSize);
  31. for (int i = root+1; i < commSize; ++i) {
  32. MPI_Recv(&buffer, 1, MPI_DOUBLE, i, Tag, MPI_COMM_WORLD,
  33. &status);
  34. sum += buffer;} }
  35. else {
  36. MPI_Probe(root, Tag, MPI_COMM_WORLD, &status);
  37. MPI_Get_count(&status, MPI_DOUBLE, &n);
  38. arr = new double[n];
  39. MPI_Recv(arr, n, MPI_DOUBLE, root, Tag, MPI_COMM_WORLD, &status);
  40. sum = sum_array(arr, n);
  41. MPI_Send(&sum, 1, MPI_DOUBLE, root, Tag, MPI_COMM_WORLD); }
  42. delete[] arr;
  43. cout << rank << " : " << sum << endl;
  44. MPI_Finalize();}
Success #stdin #stdout #stderr 0.27s 40300KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Error: unexpected symbol in "using namespace"
Execution halted