Computação Paralela - Atividade 08

Leia com atenção as instruções abaixo.

Valor: 1,0 ponto na 2ª Nota.

Data da Entrega Limite: 01/07/2022

Formato de Entrega:

  1. Um .pdf com a justificativa.
  2. Um arquivo chamado euler_rienmann.c com a resposta da implementação. Esse arquivo precisa ser compilável usando o compilador gcc.
A entrega deve ser feita via chat privado no Slack.

A atividade é individual.

Questão 01 - 1,0 Ponto

Considere o programa abaixo.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double Riemann_Zeta(double s, int k) {
    double result = 0.0;
    for (int i = 1; i < k; i++)
        for (int j = 1; j < k; j++)
            result += (2 * (i & 1) - 1) / pow(i + j, s);
    return result * pow(2, s);
}

int main(int argc, char *argv[]) {
    int N;
    sscanf(argv[1], "%d", &N);

    double *X = (double *) malloc(N * sizeof(double));

    for (unsigned int k = 0; k < N; k++)
        X[k] = Riemann_Zeta(2, k); 

    free(X);
    return 0;
}     
                

Realize as seguintes atividades:

  1. Paralelize o código.
  2. Qual a melhor forma de distribuir o trabalho na versão paralela? Justifique escolhendo um valor para entrada e executando o programa com as diversas possibilidades de escalonamento. Para cada possibilidade você deve reportar o tempo de execução. Mantenha a quantidade de threads fixa ao avaliar as alternativas. Em resumo, você deve informar o valor da entrada e tempo para cada alternativa de escalonamento.

Use o comando time no Linux para capturar o tempo ou adapte o programa para os exemplos do livro. Se optar pelo time a linha que importa é a real. Você pode usar a máquina paralela.