Computação de Alto Desempenho
Objetivos
Saber:
- Arquiteturas paralelas
- Paradigmas de programação paralela
- Metodologias gerais de desenho de algoritmos paralelos
- Estratégias algorítmicas específicas para diversos tipos de problemas
- Técnicas para otimizar o desempenho de algoritmos paralelos nas arquiteturas paralelas estudadas
Saber como:
- Otimizar o desempenho de um programa sequencial
- Implementar algoritmos paralelos para lidar com computações com grande complexidade e/ou que processam grandes quantidades de dados, executando em GPU(s) (exemplo: CUDA ou OpenCL) e/ou em arquiteturas de memória distribuída (exemplo: MPI ou Spark).
- Medir e analisar o desempenho de uma computação paralela.
Soft-skills.
- Raciocinar e avaliar criticamente as alternativas algorítmicas e tecnológicas disponíveis para resolver um problema.
- Desenhar uma solução para um problema antes de entrar na fase de implementação.
- Trabalho em equipa.
- Estruturar e escrever um relatório de projeto.
Caracterização geral
Código
11165
Créditos
6.0
Professor responsável
João Manuel dos Santos Lourenço
Horas
Semanais - 4
Totais - 56
Idioma de ensino
Inglês
Pré-requisitos
Supõe-se que os estudantes conhecem conceitos básicos de arquitetura de computadores, redes de comunicação e sistemas de operação, e assume-se proficiência em programação (tem sido utilizadas a linguagem C/C++ e Java).
Bibliografia
Como é prática nos cursos de CAD não há um livro da disciplina. Existem vários livros que cobrem os conceitos fundamentais de CAD. Segue uma lista:
- P Pacheco.An Introduction to Parallel Programming. 2nd Ed. Morgan Kaufmann,2022
- T Sterling, M Brodowicz, M Anderson. High Performance Computing - Modern Systems and Practices. Morgan Kaufmann, 2017.
- T Rauber and G Rünger. Parallel Programming for Multicore and Cluster Systems. Springer, 2013
- I Foster. Designing and Building Parallel Programs. Addison-Wesley, 1995,
Computação em GPUs:
- NVIDIA documentation
- J Sanders, Edward Kandrot, CUDA by Example: An Introduction to General-Purpose GPU Programming, Addison-Wesley, 2010
Processamento de grandes quantidades de ddos
- A Shook and D Miner. MapReduce Design Patterns. O’Reilly Media, 2012
- High Performance Spark. O’Reilly Media, 2017
Método de ensino
As aulas teóricas têm por objectivo a apresentação dos principais temas e discutir as questões mais relevantes.
As sessões laboratoriais têm lugar num laboratório de uso geral com acesso a PCs (que são multi-core) que permitem a execução dos exercícios sobre programação em memória partilhada. Para a programação de GPUs e de arquitecturas de memória distribuída, está acessível um cluster composto por várias máquinas equipadas com processadores multi-core e GPUs NVIDIA.
Todos os exercícios laboratoriais estão disponíveis a partir de um repositório GIT e incluem todas as dependências de software (exceto as linguagens de programação a utilizar). Estees também incluem testes automatizados para ajudar o aluno a avaliar a correção de suas implementações.
Método de avaliação
Elementos de avaliação
Dois testes ou exame (com peso de 60%). Os testes têm o mesmo peso relativo.
Dois projetos (com peso de 40%). Os projetos têm o mesmo peso relativo.
Participação na UC (aulas, fóruns, etc) (5% adicional à classificação final). Uma vez atribuído e publicado, este adicional não será revisto!
Todas as notas são arredondadas às centésimas.
Frequência
Média dos trabalhos práticos >= 8,50.
Cálculo da nota final
NTP = média da classificação dos testes ou classificação do exame.
NP = média das classificações dos projetos.
NPA = extra para participação nas atividades da UC.
se NTP < 8,50 então Nota Final = NTP
caso contrário Nota Final = min( NTP*0,6 + NP*0,4 + NPA*0,05 ; 20 )
Conteúdo
Motivação
- Porquê computação paralela?
- Porquê computação de alto desempenho?
Fundamentos de Computação Paralela
- Arquiteturas Paralelas
- Desempenho paralelo
- Paradigmas de Programação Paralela
- Desenho de Algoritmos Paralelos
Computação Paralela
- Padrões e estratégias para a programação paralela
- Processamento em memória partilhada
- Computação em GPUs
- Programação por troca de mensagens
Computação de alto desempenho centrada em dados
- MapReduce
- Apache Spark
Algoritmos Paralelos
- Algoritmos para processamento de gráficos
- Algoritmos de aprendizagem automática
O futuro da computação de alto desempenho
- Desafios na industria
- Tópicos de pesquisa em aberto