Objetivos

Fornecer aos alunos noções avançadas da teoria e prática dos modelos de computação orientados para arquiteturas paralelas e distribuídas. Particular ênfase na programação em memória distribuída com o MPI, e na programação em memória partilhada com processos, threads e OpenMP.

Programa

Fundamentos
Programação paralela, concorrência e paralelismo. Taxonomia de Flynn. Metodologia de programação de Foster. Principais modelos e paradigmas de programação paralela.

Programação em Memória Distribuída com o MPI
A especificação MPI, troca explícita de mensagens, protocolos de comunicação, tipos derivados e empacotamento de dados, comunicações coletivas, comunicadores, topologias.

Programação em Memória Partilhada com Processos
Processos, segmentos de memória partilhada, mapeamento de ficheiros em memória partilhada, spinlocks, semáforos.

Programação em Memória Partilhada com o Pthreads
Processos multithreaded com o Pthreads, mutexs, variáveis de condição, chaves, implementações do Pthreads.

Programação em Memória Partilhada com o OpenMP
A especificação OpenMP, diretivas de compilação, construtores de work-sharing, construtores de sincronização, funções básicas, funções de locking, variáveis de ambiente, remoção de dependências nos dados.

Programação Híbrida com o MPI e o OpenMP
Estratégias de combinação do MPI com o OpenMP em clusters multiprocessador/multicore. Executar o MPI com suporte para multithreading.

Memórias Cache em Arquiteturas Multiprocessador e Multicore
A importância das caches em arquiteturas multiprocessador/multicore: localidade espacial e temporal, sincronização com barreiras e com exclusão mútua.

Métricas de Desempenho
Medidas de speedup, eficiência, redundância, utilização e qualidade duma aplicação paralela. Lei de Amdahl. Lei de Gustafson-Barsis. Métrica de Karp-Flatt. Métrica de isoeficiência.

Algoritmos Paralelos
Paralelização de algoritmos de ordenação, de algoritmos de procura, de algoritmos baseados em métodos de Monte Carlo, e de algoritmos para multiplicação de matrizes.

Bibliografia

Parallel Programming with MPI
P. Pacheco. Morgan Kaufmann.

Parallel Programming in C with MPI and OPenMP
Michael J. Quinn. McGraw-Hill.

Advanced Linux Programming
M. Mitchell, J. Oldham and A. Samuel. New Riders.

Pthreads Programming
B. Nichols, D. Buttlar and J.P. Farrell. O'Reilly.

Parallel Programming in OpenMP
R. Chandra, L. Dagum, D. Kohr, D. Maydan, J. McDonald and R. Menon. Morgan Kaufmann.

Parallel Programming: Techniques and Applications Using Networked Workstations and Parallel Computers
B. Wilkinson, M. Allen. Prentice Hall.

Informação Complementar

An Introduction to Parallel Programming

The Free Lunch is Over

MPI Forum

A User's Guide to MPI

Writing Message Passing Parallel Programs with MPI

POSIX Threads Programming

POSIX Threads Tutorial

OpenMP API

An Introduction Into OpenMP

A Hands-On Introduction to OpenMP

Advanced OpenMP Tutorial

Exercises to Support Learning OpenMP

Intel Guide for Developing Multithreaded Applications

Parallel Programming for Multicore