#include #include #include #include #include "mpi.h" int main(int argc, char** argv) { int meu_rank, np, tag=0; float a,b,c,d,x1,x2,ok; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &meu_rank); MPI_Comm_size(MPI_COMM_WORLD,&np); a = 1; b = 1; c = 1; if (meu_rank == 0) { d = (b*b) - (4*a*c); MPI_Send(&d, 1, MPI_FLOAT, 1, tag, MPI_COMM_WORLD); MPI_Send(&d, 1, MPI_FLOAT, 2, tag, MPI_COMM_WORLD); } else if(meu_rank == 1) { MPI_Recv(&d, 1, MPI_FLOAT, 0, tag, MPI_COMM_WORLD, &status); if ( d < 0 ){ ok = 0; x1 = 0; MPI_Send(&ok, 1, MPI_FLOAT, 3, tag, MPI_COMM_WORLD); MPI_Send(&x1, 1, MPI_FLOAT, 3, tag, MPI_COMM_WORLD); } else { ok = 1; x1 = ((-b) + sqrt(d))/(2*a); MPI_Send(&ok, 1, MPI_FLOAT, 3, tag, MPI_COMM_WORLD); MPI_Send(&x1, 1, MPI_FLOAT, 3, tag, MPI_COMM_WORLD); } } else if(meu_rank == 2) { MPI_Recv(&d, 1, MPI_FLOAT, 0, tag, MPI_COMM_WORLD, &status); if ( d < 0 ){ ok = 0; x2 = 0; MPI_Send(&ok, 1, MPI_FLOAT, 3, tag, MPI_COMM_WORLD); MPI_Send(&x2, 1, MPI_FLOAT, 3, tag, MPI_COMM_WORLD); } else { ok = 1; x2 = ((-b) - sqrt(d))/(2*a); MPI_Send(&ok, 1, MPI_FLOAT, 3, tag, MPI_COMM_WORLD); MPI_Send(&x2, 1, MPI_FLOAT, 3, tag, MPI_COMM_WORLD); } } else { MPI_Recv(&ok, 1, MPI_FLOAT, 1, tag, MPI_COMM_WORLD, &status); MPI_Recv(&x1, 1, MPI_FLOAT, 1, tag, MPI_COMM_WORLD, &status); MPI_Recv(&ok, 1, MPI_FLOAT, 2, tag, MPI_COMM_WORLD, &status); MPI_Recv(&x2, 1, MPI_FLOAT, 2, tag, MPI_COMM_WORLD, &status); if ( ok == 0 ) { printf("O valor de x1 e x2 nao existem em R\n"); } else { printf("O valor de x1 é %.2f\n", x1); printf("O valor de x2 é %.2f\n", x2); } } MPI_Finalize( ); }