fork download
  1. #include <mpi.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main(int argc, char *argv[]) {
  6. int errs = 0;
  7. int rank, size;
  8. long long int N, local_sum = 0, global_sum = 0;
  9.  
  10. MPI_Init(&argc, &argv);
  11. MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  12. MPI_Comm_size(MPI_COMM_WORLD, &size);
  13.  
  14. if (argc < 2) {
  15. printf("Usage: %s <N>\n", argv[0]);
  16. MPI_Abort(MPI_COMM_WORLD, 1);
  17. }
  18.  
  19. N = atoll(argv[1]);
  20.  
  21. // Calculate local sum
  22. long long int start = (N / size) * rank;
  23. long long int end = start + N / size;
  24. if (rank == size - 1) {
  25. end = N;
  26. }
  27. for (long long int i = start; i < end; i++) {
  28. local_sum += i;
  29. }
  30.  
  31. // Perform reduction to compute global sum
  32. MPI_Reduce(&local_sum, &global_sum, 1, MPI_LONG_LONG, MPI_SUM, 0, MPI_COMM_WORLD);
  33.  
  34. // Print result
  35. if (rank == 0) {
  36. printf("Sum from 0 to %lld is %lld\n", N, global_sum);
  37. }
  38.  
  39. MPI_Finalize();
  40. return errs;
  41. }
  42.  
Success #stdin #stdout #stderr 0.29s 40724KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Error: unexpected symbol in "int main"
Execution halted