Sumários

Aula 1: 19.09.2017

Apresentação
Considerações gerais sobre o programa, bibliografia, funcionamento das aulas e método de avaliação.

Aula 2: 21.09.2017

Fundamentos
Programação paralela, concorrência e paralelismo. Taxonomia de Flynn. Multiprocessadores, multicores e protocolos de coerência das caches. Multicomputadores.

Aula 3: 26.09.2017

Fundamentos
Metodologia de programação de Foster. Decomposição do domínio e decomposição funcional. Padrões de comunicação. O problema da granularidade. Balanceamento de carga. Principais modelos e paradigmas de programação paralela.

Aula 4: 28.09.2017

Programação em Memória Distribuída com o MPI
O MPI (Message-Passing Interface): história, conceitos e objetivos. O modelo SPMD (Single Program Multiple Data). Estrutura base de um programa MPI. O comunicador universal (MPI_COMM_WORLD). Tipos de dados básicos. Envio e recepção de mensagens em modo standard, modo synchronous e modo buffered.

Aula 5: 03.10.2017

Programação em Memória Distribuída com o MPI
Envio e recepção simultânea de mensagens. Comunicações bloqueantes versus não-bloqueantes. Agrupar dados para comunicação. Tipos derivados. Empacotamento de dados.

Aula 6: 10.10.2017

Programação em Memória Distribuída com o MPI
Resolução de exercícios.

Aula 7: 12.10.2017

Programação em Memória Distribuída com o MPI
Comunicações coletivas: broadcast, reduce, scatter e gather. Criação de grupos e de comunicadores.

Aula 8: 17.10.2017

Programação em Memória Distribuída com o MPI
Topologias: grelhas cartesianas. Medir o tempo de execução. Análise e discussão de um exemplo prático de paralelização de uma aplicação para o cálculo do valor de Pi utilizando o método de Monte Carlo. Standard I/O, compilação e execução de programas no MPI.

Trabalhos Práticos
Apresentação e discussão do 1º trabalho prático.

Aula 9: 19.10.2017

Programação em Memória Distribuída com o MPI
Resolução de exercícios.