MC-SD04-I
Programação com MPI

Professor: Gabriel Silva (UFRJ)

Horarios: Quinta 25/01 de 08:00h às 12:00h

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:
  1. 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
  2. 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
  3. 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
  4. 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:
  1. https://www.mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf
  2. Gabriel Silva, Programação Paralela com MPI: Um Curso Introdutório, Amazon Serviços de varejo do Brasil, 2018.
  3. Peter Pacheco. Parallel Programming with MPI . Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2019.
  4. Wesley Kendall, 2013, beginning MPI( An Introduction in C) .