A Engenharia de Controle e Automação
Por: William Leite • 20/1/2022 • Trabalho acadêmico • 846 Palavras (4 Páginas) • 82 Visualizações
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <queue>
#include <mpi.h>
#include <stack>
/*
Desenvolva um código em OpenMPI que irá considerar a execução em 10 máquinas.
O mestre irá ler um valor e irá mandar para os trabalhadores.
Os trabalhadores com índice par irão multiplicar o número recebido por 20 e somar com o seu índice,
os trabalhadores de índice ímpar por 100 e somar com o seu índice.
Após a multiplicação os trabalhadores enviam o resultado para o mestre que exibe as respostas. */
using namespace std;
int main(int argc, char *argv[])
{
int numero_de_processos=0, processo_id=0;
float valor_enviado=rand()%100, valor_recebido=0, maq1=0, maq2=0, maq3=0, maq4=0, maq5=0, maq6=0, maq7=0, maq8=0, maq9=0, maq10=0;
clock_t inicio=0, fim=0, tempo_total=0;
inicio=clock(); //Início cronômetro (execução).
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numero_de_processos);
MPI_Comm_rank(MPI_COMM_WORLD, &processo_id);
if(processo_id == 0)
{
cout<<"Valor gerado aleatoriamente que sera enviado: "<<valor_enviado<<endl;
MPI_Send(&valor_enviado,1, MPI_INT, 1, 15000, MPI_COMM_WORLD);
MPI_Send(&valor_enviado,1, MPI_INT, 2, 15000, MPI_COMM_WORLD);
MPI_Send(&valor_enviado,1, MPI_INT, 3, 15000, MPI_COMM_WORLD);
MPI_Send(&valor_enviado,1, MPI_INT, 4, 15000, MPI_COMM_WORLD);
MPI_Send(&valor_enviado,1, MPI_INT, 5, 15000, MPI_COMM_WORLD);
MPI_Send(&valor_enviado,1, MPI_INT, 6, 15000, MPI_COMM_WORLD);
MPI_Send(&valor_enviado,1, MPI_INT, 7, 15000, MPI_COMM_WORLD);
MPI_Send(&valor_enviado,1, MPI_INT, 8, 15000, MPI_COMM_WORLD);
MPI_Send(&valor_enviado,1, MPI_INT, 9, 15000, MPI_COMM_WORLD);
MPI_Send(&valor_enviado,1, MPI_INT, 10, 15000, MPI_COMM_WORLD);
}
else if(processo_id == 1)//índice ímpar irão multiplicar por 100 e somar com o seu índice.
{
MPI_Recv(&valor_recebido,1, MPI_INT, 0, 15000, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
int valor_alterado=0;
valor_alterado=valor_recebido*100+1;
valor_enviado=valor_alterado;
MPI_Send(&valor_enviado,1, MPI_INT, 0, 15000, MPI_COMM_WORLD);
}
else if(processo_id == 2)//índice par irão multiplicar por 20 e somar com o seu índice.
{
MPI_Recv(&valor_recebido,1, MPI_INT, 0, 15000, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
int valor_alterado=0;
valor_alterado=valor_recebido*20+2;
valor_enviado=valor_alterado;
MPI_Send(&valor_enviado,1, MPI_INT, 0, 15000, MPI_COMM_WORLD);
}
else if(processo_id == 3)//índice ímpar irão multiplicar por 100 e somar com o seu índice.
{
MPI_Recv(&valor_recebido,1, MPI_INT, 0, 15000, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
int valor_alterado=0;
valor_alterado=valor_recebido*100+3;
valor_enviado=valor_alterado;
MPI_Send(&valor_enviado,1, MPI_INT, 0, 15000, MPI_COMM_WORLD);
}
else if(processo_id == 4)//índice par irão multiplicar o número recebido por 20 e somar com o seu índice.
{
MPI_Recv(&valor_recebido,1, MPI_INT, 0, 15000, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
int valor_alterado=0;
valor_alterado=valor_recebido*20+4;
valor_enviado=valor_alterado;
MPI_Send(&valor_enviado,1, MPI_INT, 0, 15000, MPI_COMM_WORLD);
}
else if(processo_id == 5)//índice ímpar irão multiplicar por 100 e somar com o seu índice.
{
MPI_Recv(&valor_recebido,1, MPI_INT, 0, 15000, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
int valor_alterado=0;
valor_alterado=valor_recebido*100+5;
valor_enviado=valor_alterado;
MPI_Send(&valor_enviado,1, MPI_INT, 0, 15000, MPI_COMM_WORLD);
}
else if(processo_id == 6)//índice par irão multiplicar o número recebido por 20 e somar com o seu índice.
{
MPI_Recv(&valor_recebido,1, MPI_INT, 0, 15000, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
...