Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "mpi.h"
- #include <stdio.h>
- #include <stdlib.h>
- #define NR 4
- #define INF 999
- int main(int argc, char **argv) {
- MPI_Init(&argc, &argv);
- int rank, numtasks;
- int masterGraph[NR][NR] = {{0}};
- MPI_Status stat;
- MPI_Comm_rank(MPI_COMM_WORLD, &rank);
- MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
- int matrixGraph[NR][NR] = {
- { 0, 5, 15, 3 },
- { INF, 0, 6, INF },
- { INF, INF, 0, 9 },
- { 1, INF, INF, 0 },
- };
- //MPI_Bcast(matrixGraph, NR*NR, MPI_INT, 0, MPI_COMM_WORLD);
- if (rank == 0) {
- for (int k = 0; k < NR; k++) {
- for (int j = 0; j < NR; j++) {
- if (matrixGraph[0][k] + matrixGraph[k][j] < matrixGraph[0][j]) {
- matrixGraph[0][j] = matrixGraph[0][k] + matrixGraph[k][j];
- }
- }
- }
- for (int i = 0; i < NR; i++) {
- masterGraph[0][i] = matrixGraph[0][i];
- if (i != 0)
- MPI_Send(&matrixGraph, NR*NR, MPI_INT, i, 1, MPI_COMM_WORLD);
- }
- printf("\n");
- }
- if (rank != 0) {
- MPI_Recv(matrixGraph, NR*NR, MPI_INT, 0, 1, MPI_COMM_WORLD, &stat);
- for (int k = 0; k < NR; k++) {
- for (int j = 0; j < NR; j++) {
- if (matrixGraph[rank][k] + matrixGraph[k][j] < matrixGraph[rank][j]) {
- matrixGraph[rank][j] = matrixGraph[rank][k] + matrixGraph[k][j];
- }
- }
- }
- MPI_Send(&matrixGraph[rank], NR, MPI_INT, 0, 1, MPI_COMM_WORLD);
- //MPI_Alltoall(&matrixGraph, NR*NR, MPI_INT, 0 , NR*NR, MPI_INT, MPI_COMM_WORLD);
- }
- if (rank == 0) {
- for (int p = 1; p < numtasks; p++) {
- MPI_Recv(matrixGraph[p], NR, MPI_INT, p, 1, MPI_COMM_WORLD, &stat);
- for (int j = p; j < NR; j++) {
- for (int k = 0; k < NR; k++) {
- masterGraph[j][k] = matrixGraph[j][k];
- }
- }
- }
- for (int i = 0; i < NR; i++) {
- for (int j = 0; j < NR; j++) {
- if (masterGraph[i][j] == 999)
- printf("- ");
- else
- printf("%d ", masterGraph[i][j]);
- }
- printf("\n");
- }
- }
- MPI_Finalize();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement