Professor: Gabriel P. Silva (Instituto de Computação - UFRJ)
Horarios: Terça 01/02 de 13:30h às 17:30h
Objetivo: O objetivo deste curso é apresentar aos programadores que não estão familiarizados com programação paralela as noções básicas para desenvolver e executar programas paralelos com o paradigma de troca de mensagens, utilizando as bibliotecas de comunicação do padrão MPI. O MPI é um padrão, implantado há mais de 25 anos, que vem sendo amplamente utilizado para o desenvolvimento de programas paralelos científicos em arquitetura de sistemas distribuídos, tais como clusters de alto desempenho, com milhares de processadores. O código fonte dos programas utilizados no curso, e as instruções para a instalação do ambiente de execução MPI, estão disponíveis em https://github.com/gpsilva2003/MPI. Utilizamos a documentação de referência do próprio padrão MPI e as referências listadas na seção bibliográfica para a elaboração do curso. O curso inicia fornecendo informações sobre o ambiente de sistemas distribuídos e sobre a programação de troca de mensagens. A seguir apresentamos as rotinas básicas da norma MPI, incluindo as rotinas de gerenciamento de ambiente, de comunicação ponto a ponto, as rotinas de comunicações coletivas, e detalhes sobre os diversos modos de envio e recepção das mensagens. Durante o curso, serão apresentados exemplos em linguagem C, com alguns exercícios sendo propostos aos participantes. Assumimos que o usuário possui compreensão gerais sobre programação com a linguagem C.
Ementa:
- Introdução
- Características de MPI
- Histórico de MPI
- Plataformas de Hardware
- Exemplo de aplicações paralelas
- Avaliação de desempenho - Conceitos básicos
- O padrão MPI.
- Exemplo de um programa MPI
- Rotinas básicas de gerenciamento.
- Rotinas básicas de comunicação ponto a ponto
- Correspondência entre os tipos MPI e C
- Identificando o tamanho e as informações da mensagem recebida
- Estudo de caso: método do trapézio
- Rotinas de Comunicação Coletivas
- Barreira: MPI_Barrier()
- Difusão: MPI_Broadcast()
- Coleta: MPI_Gather()
- Redução: MPI_Reduce()
- Redução com difusão: MPI_Allreduce()
- Coleta com difusão: MPI_Allgather()
- Estudo de caso: multiplicação de matriz
- Comunicação MPI em detalhes
- Rotinas de envio e recepção bloqueantes x não-bloqueantes
- Modos de comunicação: síncrono, pronto, bufferizado e padrão
- Evitando o impasse (deadlock)
- Considerações de desempenho
- Estudo de caso: número primos
Bibliografia:
- https://www.mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf
- Gabriel Silva, Programação Paralela com MPI: Um Curso Introdutório, Amazon Serviços de varejo do Brasil, 2018.
- Peter Pacheco. Parallel Programming with MPI . Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2019.
- Wesley Kendall, 2013, beginning MPI( An Introduction in C) .