Computação Paralela - Atividade 08

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.

Questão 01 - 1,5 Pontos.

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.

Questão 02 - 1,0 Ponto.

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.