UFSM > Ciência da Computação > ELC139 - Programação Paralela

Parte 1: Preparação

  1. Escolha um computador com mais de um núcleo de processamento. Verifique suas características (processador, memória).

  2. Baixe o arquivo pthreads_dotprod.zip para seu diretório pessoal. Este arquivo contém um programa que usa POSIX threads para cálculo de um produto escalar.

  3. Compile o programa:
    make
    

  4. Execute o programa pthreads_dotprod usando 1 thread, para vetor de 1000000 de elementos, com 2000 repetições:
    ./pthreads_dotprod 1 1000000 2000
    

  5. Execute o mesmo programa usando 2 threads, com 500000 elementos para cada thread, 2000 repetições:
    ./pthreads_dotprod 2 500000 2000
    
    O resultado deve ser o mesmo do caso anterior, mas o tempo de processamento deve ser diferente.

  6. Estude o código-fonte do programa, verificando as funções que implementam o paralelismo.

  7. Observe que há uma segunda versão do programa em pthread_dotprod2.c. Esta versão tem 2 linhas a menos.

Parte 2: Questões

  1. Explique como encontram-se implementadas as 4 etapas de projeto: particionamento, comunicação, aglomeração, mapeamento (use trecho de código para ilustrar a explicação).

  2. Considerando o tempo (em segundos) mostrado na saída do programa, qual foi a aceleração com o uso de threads?

  3. A aceleração (speedup) se sustenta para outros tamanhos de vetores, números de threads e repetições? Para responder a essa questão, você terá que realizar diversas execuções, variando o tamanho do problema (tamanho dos vetores e número de repetições) e o número de threads (1, 2, 4, 8..., dependendo do número de núcleos). Cada caso deve ser executado várias vezes, para depois calcular-se um tempo de processamento médio para cada caso. Atenção aos fatores que podem interferir na confiabilidade da medição: uso compartilhado do computador tempos muito pequenos, etc.

  4. Elabore um gráfico/tabela de aceleração a partir dos dados obtidos no exercício anterior.

  5. Explique as diferenças entre pthread_dotprod.c e pthread_dotprod2.c. Com as linhas removidas, o programa está correto?

Parte 3: OpenMP

  1. Implemente um programa equivalente usando OpenMP.

  2. Avalie o desempenho do programa em OpenMP, usando os mesmos dados/argumentos do programa com threads POSIX.

Parte 4: Outro programa

  1. Escolha outro programa a ser paralelizado com threads (de preferência, um programa cujo código você já conheça). Pode ser o mesmo programa que você escolheu para fazer profiling no trabalho anterior, ou um programa feito em outra linguagem (Java, C++, etc.).

  2. Paralelize o programa usando OpenMP, ou uma ferramenta equivalente para a linguagem escolhida (por exemplo, JOMP ou JaMP para Java).

  3. Avalie o desempenho do programa paralelizado. Ficou melhor ou pior? Justifique.

Entrega

Material de apoio

Última atualização em: Fri Apr 4 14:20:36 2014. Autoria: Andrea Schwertner Charão.