Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <mpi.h>
- #include <stdio.h>
- #define comm MPI_COMM_WORLD
- int main(int argc, char* argv[])
- {
- MPI_Init(&argc, &argv);
- MPI_Status status;
- MPI_Request req;
- int j, k, i, rank, size, N = 4;
- MPI_Comm_rank(comm, &rank);
- MPI_Comm_size(comm, &size);
- double a[N][N], b[N][N], c[N][N], d[N][N], t1 = 0, t2 = 0, t3 = 0;
- int del = N / size;
- int i0 = rank * del;
- int imax = i0 + del;
- for (i = 0; i < N; i++)
- {
- for (j = 0; j < N; j++)
- {
- a[i][j] = i;
- b[i][j] = j;
- c[i][j] = 0;
- d[i][j] = 0;
- }
- }
- if (rank == size - 1) { imax = N; }
- t1 = MPI_Wtime();
- for(i = i0; i < imax; ++i)
- {
- for(j = 0; j < N; ++j)
- {
- for(k = 0; k < N; ++k)
- {
- c[i][j] = a[i][k] * b[k][j];
- }
- }
- }
- t2 = MPI_Wtime();
- MPI_Reduce(&c, &d, N * N, MPI_DOUBLE, MPI_SUM, 0, comm);
- t3 = MPI_Wtime();
- printf("T1 = %f, t2 = %f, t3 = %f\n", t1, t2, t3);
- for (i = 0; i < N; ++i)
- {
- for (j = 0; j < N; ++j)
- {
- 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]);
- }
- }
- MPI_Finalize();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement