Esta atividade deve ser colocada no repositório, nas pasta atividades/atividade08 sob os nomes de arquivos indicados na questão.
Valor: 2,5 Pontos
Data de Entrega: 07/09/2020.
O programa desta questão deve ser nomeado como primos.c. Use o modelo Bag Of Tasks para resolver o problema de encontrar todos os números primos no intervalo de 1 a 1000000, usando N processos. Atribua a um dos processos o papel de líder (gerencia a distribuição de tarefas) e aos demais o papel de colaboradores (executam a tarefa de avaliar a primalidade de um número). Utilize mensagens de envio e recepção não bloqueantes de forma a paralelizar a computação com o envio de mensagens. Fica ao seu critério definir uma política de distribuição de carga.
Você pode definir uma tarefa como um chunk de números a serem verificados e ir enviando cada chunk para um processo tratar. Use a função int primo(int n), definida a seguir (recebe um valor inteiro como entrada, devolve 1 caso o número seja primo e 0 caso o contrário). Observe que o custo computacional para avaliar a primalidade de um número pode variar significantemente de um número para outro.
int primo (int n) {
int i;
if (n <= 1) return 0;
if (n == 0) return 1;
if (n % 2) return 0;
for (i = 3; i < (sqrt(n)+1); i+=2) {
if (n%i == 0) return 0;
}
return 1;
}
Não é necessário fazer testes de desempenho, apenas se certifique que seu programa funciona com até 8 processos.
Considere um comunicador inicialmente constituído de 12 processos. Elabore um programa comMult2and3.c que crie três comunicadores:
Faça com que cada processo do seu programa imprima o seu respectivo rank em todos os comunicadores que faz parte.