Tópicos Avançados de Informática
Programação Paralela
Ano Lectivo de 2003/2004
Aulas Teóricas (em formato ps.gz)
Programas Exemplo (em formato tar.gz)
- Fundamentos
No que consiste a programação
paralela. Paralelismo implícito versus explícito. Decomposição do
domínio versus decomposição funcional. Tipos de partição: regular,
irregular, adaptativa. O problema da granularidade. Padrões de
comunicação: local, global, estruturada, não estruturada, estática,
dinâmica, síncrona e assíncrona. Factores limitativos de
performance. Modelos de programação paralela: memória partilhada
versus memória distribuída.
- Programação em Memória Partilhada
Paralelismo nos
dados. Programação paralela com processos. Comunicação por segmentos
de memória partilhada. Funções da família shm. Mapeamento de
ficheiros em memória. Funções da família mmap. Sincronização de
processos: locks e semáforos. A instrução TSL. Família de funções
sem.
- Programação com Pthreads
Concorrência com processos
multithreaded. Noção de thread. O modelo Pthreads. Criação, junção e
terminação de threads. Joinable versus detached threads. Cuidados a
ter na utilização de threads. Sincronização e regiões críticas:
mutexs e variáveis de condição. Thread-specific data: chaves e
iniciação única. Implementações do Pthreads: user threads; kernel
threads; two-level scheduler threads. Processos versus threads.
- Programação em Memória Distribuída
O MPI
(Message-Passing Interface): história, conceitos e objectivos. 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: modo standard,
synchronous, buffered e ready. Comunicações bloqueantes versus não
bloqueantes. Agrupar dados para comunicação: tipos derivados e
empacotamento de dados.
- Programação em Memória Distribuída
Comunicações
colectivas: broadcast, reduce, scatter e gather. Grupos e
comunicadores. Medir o tempo de execução. O LAM/MPI no cluster
Dolphin2. Standard I/O no LAM. Comandos de sessão do LAM. Compilar,
iniciar, monitorizar e terminar a execução no LAM.
Última Actualização: 24 de Outubro de 2003