2025

Programação Paralela

Nome: Programação Paralela
Cód.: INF13266M
6 ECTS
Duração: 15 semanas/156 horas
Área Científica: Informática

Língua(s) de lecionação: Português, Inglês
Língua(s) de apoio tutorial: Português, Inglês
Regime de Frequência: Presencial

Objetivos de Desenvolvimento Sustentável

Objetivos de Aprendizagem

Pretende-se que o estudante:
- fique a saber as técnicas usadas para resolver o problemas específicos dos algoritmos paralelos;
- fique a conhecer alguns algoritmos paralelos;
- fique a saber analisar o comportamento de algoritmos paralelos;
- consiga desenvolver e programar algoritmos paralelos.

Conteúdos Programáticos

Paralelismo e concorrência
Sistemas para computação paralela
- multicore, multiprocessador, cluster, heterogéneo
- memória partilhada e distribuída
- caches, consistência e coerência
- comunicação e sincronização
Suporte para a programação paralela
- acessos atómicos
- lock, semáforo, monitor
- secção crítica, race
- troca de mensagens
Desempenho de programas paralelos
Modelos de programação
- threads Posix
- OpenMP
- MPI
Desenho de algoritmos paralelos
- paralelismo de tasks
- paralelismo de dados
- padrões para paralelismo
- algoritmos distribuídos
Estruturas de dados paralelas

Métodos de Ensino

As aulas dividem-se em aulas teóricas, em que são expostos e discutidos os problemas e as técnicas a usar, e em que são desenvolvidos e analisados algoritmos, e aulas práticas, onde são usadas as técnicas expostas e onde é proposto aos estudantes o desenvolvimento de algoritmos.

Avaliação

Avaliação contínua: dois trabalhos práticos de programação e uso de algoritmos paralelos (componente prática) e um teste (componente escrita).

Avaliação final: dois trabalhos práticos de programação e uso de algoritmos paralelos (componente prática) e um exame (componente escrita).

Nota mínima em cada trabalho: 7.0 valores. Nota mínima na componente escrita: 7.0 valores. Peso da componente escrita na nota final: 50%. Peso da componente prática na nota final: 50%. Peso de cada trabalho na nota da componente prática: 50%.

Bibliografia

Thomas Rauber, Gudula Rünger. Parallel programming, for multicore and cluster systems. Springer, 2010.
Maurice Herlihy, Nir Shavit. The art of multiprocessor programming. Morgan Kaufmann, 2008.
Peter Pacheco. An introduction to parallel programming. Morgan Kaufmann, 2011.
Wan Fokkink. Distributed Algorithms: An Intuitive Approach. The MIT Press, 2018.
Paul Butcher. Seven Concurrency Models in Seven Weeks. The Pragmatic Programmers, 2014.
Ananth Grama, George Karypis, Vipin Kumar, Anshul Gupta. Introduction to Parallel Computing (2nd Edition). Addison Wesley, 2003.

Equipa Docente