Programação Paralela
Objetivos de Desenvolvimento Sustentável
Objetivos de Aprendizagem
- 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
Avaliação
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
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
- Vasco Fernando de Figueiredo Tavares Pedro [responsável]