Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. #include <mpi.h>
  2. #include <stdio.h>
  3. #define comm MPI_COMM_WORLD
  4. int main(int argc, char* argv[])
  5. {
  6. MPI_Init(&argc, &argv);
  7. MPI_Status status;
  8. MPI_Request req;
  9. int j, k, i, rank, size, N = 4;
  10. MPI_Comm_rank(comm, &rank);
  11. MPI_Comm_size(comm, &size);
  12. double a[N][N], b[N][N], c[N][N], d[N][N], t1 = 0, t2 = 0, t3 = 0;
  13. int del = N / size;
  14. int i0 = rank * del;
  15. int imax = i0 + del;
  16. for (i = 0; i < N; i++)
  17. {
  18. for (j = 0; j < N; j++)
  19. {
  20. a[i][j] = i;
  21. b[i][j] = j;
  22. c[i][j] = 0;
  23. d[i][j] = 0;
  24. }
  25. }
  26. if (rank == size - 1) { imax = N; }
  27. t1 = MPI_Wtime();
  28. for(i = i0; i < imax; ++i)
  29. {
  30. for(j = 0; j < N; ++j)
  31. {
  32. for(k = 0; k < N; ++k)
  33. {
  34. c[i][j] = a[i][k] * b[k][j];
  35. }
  36. }
  37. }
  38. t2 = MPI_Wtime();
  39.  
  40. MPI_Reduce(&c, &d, N * N, MPI_DOUBLE, MPI_SUM, 0, comm);
  41. t3 = MPI_Wtime();
  42. printf("T1 = %f, t2 = %f, t3 = %f\n", t1, t2, t3);
  43. for (i = 0; i < N; ++i)
  44. {
  45. for (j = 0; j < N; ++j)
  46. {
  47. printf("Rank = %i, Size = %i, A[%i, %i] = %f, B[%i, %i] = %f, C[%i, %i] = %f, D[%i, %i] = %f\n", rank, size, i, j, a[i][j], i, j, b[i][j], i, j, c[i][j], i, j, d[i][j]);
  48. }
  49. }
  50. MPI_Finalize();
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement