#include #include int main(int argc, char** argv) { int rank, size; int a, b, result, total=0; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); if (rank == 0) { a = 2; b = 3; // Enviando dados para os outros processos MPI_Send(&a, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); MPI_Send(&a, 1, MPI_INT, 2, 0, MPI_COMM_WORLD); MPI_Send(&b, 1, MPI_INT, 2, 1, MPI_COMM_WORLD); MPI_Send(&b, 1, MPI_INT, 3, 0, MPI_COMM_WORLD); // Recebendo os resultados MPI_Recv(&result, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); total = total + result; // total += result; MPI_Recv(&result, 1, MPI_INT, 2, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); total = total + result; MPI_Recv(&result, 1, MPI_INT, 3, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); total = total + result; // Calculando o resultado final e imprimindo printf("O resultado de (a + b)^2 é: %d\n", total); } else if (rank == 1) { MPI_Recv(&a, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); result = a * a; MPI_Send(&result, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); } else if (rank == 2) { MPI_Recv(&a, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); MPI_Recv(&b, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE); result = 2 * a * b; MPI_Send(&result, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); } else if (rank == 3) { MPI_Recv(&b, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); result = b * b; MPI_Send(&result, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); } MPI_Finalize(); return 0; }