Computação Paralela
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Ciência de Computadores |
Ocorrência: 2022/2023 - 1S
Ciclos de Estudo/Cursos
Língua de trabalho
Português e inglês
Objetivos
Dotar os estudantes do conhecimento teórico e prático dos modelos de computação orientados para arquiteturas paralelas e distribuídas. Será dada ênfase ao desenvolvimento de competências de programação para memória distribuída com o MPI, e de programação em memória partilhada com processos, threads e OpenMP.
Resultados de aprendizagem e competências
Ao completarem esta unidade curricular, os estudantes deverão ser capazes de:
- conhecer os principais modelos, paradigmas, ambientes e ferramentas de programação paralela
- entender e aferir conceitos relativos à estrutura, funcionamento e desempenho de programas paralelos
- formular soluções nos principais paradigmas de programação paralela, nomeadamente MPI, Pthreads e OpenMP
Modo de trabalho
Presencial
Programa
Fundamentos:
Programação paralela, concorrência e paralelismo. Taxonomia de Flynn. Metodologia de Foster. Medidas de speedup e eficiência. Lei de Amdahl. Lei de Gustafson-Barsis. Métrica de Karp-Flatt.
Programação em Memória Distribuída:
A especificação MPI, troca explícita de mensagens, protocolos de comunicação, tipos derivados, empacotamento de dados, comunicações coletivas, comunicadores, topologias.
Programação em Memória Partilhada:
Processos, segmentos de memória partilhada, mapeamento de ficheiros em memória partilhada, spinlocks, semáforos. Processos multithreaded com o Pthreads, mutexs, variáveis de condição, chaves, implementações do Pthreads. A especificação OpenMP, diretivas de compilação, construtores de work-sharing e de sincronização, funções básicas, variáveis de ambiente, remoção de dependências nos dados, desempenho, combinando o OpenMP com o MPI.
Algoritmos:
Paralelização de algoritmos. Estratégias de escalonamento e balanceamento de carga.
Bibliografia Obrigatória
P. Pacheco.; Parallel Programming with MPI, Morgan Kaufmann
Michael J. Quinn; Parallel Programming in C with MPI and OPenMP, McGraw-Hill.
M. Mitchell, J. Oldham and A. Samuel; Advanced Linux Programming, New Riders
B. Nichols, D. Buttlar and J.P. Farrell; Pthreads Programming, O'Reilly
R. Chandra, L. Dagum, D. Kohr, D. Maydan, J. McDonald and R. Menon; Parallel Programming in OpenMP, Morgan Kaufmann
B. Wilkinson, M. Allen.; Parallel Programming: Techniques and Applications Using Networked Workstations and Parallel Computers , Prentice Hall.
Métodos de ensino e atividades de aprendizagem
Exposição e discussão dos conceitos sobre modelos de programação paralela e distribuída; resolução de exercícios e apoio no desenvolvimento de trabalhos práticos de programação ilustrativos dos vários modelos de programação paralela.
Tipo de avaliação
Avaliação distribuída com exame final
Componentes de Avaliação
Designação |
Peso (%) |
Exame |
70,00 |
Trabalho laboratorial |
30,00 |
Total: |
100,00 |
Componentes de Ocupação
Designação |
Tempo (Horas) |
Estudo autónomo |
70,00 |
Frequência das aulas |
42,00 |
Trabalho laboratorial |
50,00 |
Total: |
162,00 |
Obtenção de frequência
N/A
Fórmula de cálculo da classificação final
A avaliação dos alunos faz-se por realização de 2 trabalhos práticos e de um exame final escrito. Cada trabalho prático terá um peso total de 3 em 20 valores na classificação final da unidade curricular e o exame final escrito terá um peso de 14 em 20 valores na classificação final da unidade curricular. A classificação mínima no exame é de 40%.
Melhoria de classificação
A melhoria de classificação incide apenas sobre o exame final.