Computação de Alto Desempenho
Objetivos
Compreender:
- Especificidades da execução paralela vs. sequencial
- Diferentes tipos de arquitetura paralelas
- Modelos de memória partilhada e troca de mensagens
- Metodologias para desenvolver de soluções que recorram a computação paralela
- Métricas para a avaliação de um programa paralelo
- Modelos de programação e execução de GPUs
- Modelo de programação e execução de frameworks “data parallel”
Ser capaz de:
- Identificar oportunidades para paralelização
- Particionar um problema para ser executado em paralelo
- Implementar algoritmos paralelos
- Raciocinar sobre o comportamento de sistemas paralelos
- Medir, analisar e otimizar o desempenho de uma computação paralela
Conhecer
- Linguagens e bibliotecas para computação paralela em mullticore, GPUs e memória distribuída
- Estratégias algorítmicas para diversos tipos de problemas
- Técnicas de otimização em diferentes tipos de arquiteturas
Caracterização geral
Código
11165
Créditos
6.0
Professor responsável
Hervé Miguel Cordeiro Paulino
Horas
Semanais - 4
Totais - 52
Idioma de ensino
Português
Pré-requisitos
A disponibilizar brevemente
Bibliografia
Como é comum em cursos de computação paralela e de alto desempenho não há um livro da disciplina. Existem vários livros que cobrem conceitos fundamentais da UC. Segue uma lista:
- Robert Robey, Yuliana Zamora. ParallelandHigh PerformanceComputing. Simon andSchuster (2021). ISBN, 1617296465
- Peter Pacheco, MatthewMalensek. AnIntroduction to ParallelProgramming. Morgan Kaufmann (2021). ISBN: 9780128046050
- Mahmoud Parsian. Data AlgorithmswithSpark. O''Reilly (2022). ISBN-10. 1492082384 · ISBN-13. 978-1492082385
- McCool M., Arch M., Reinders J.; StructuredParallelProgramming: Patterns for EfficientComputation. Morgan Kaufmann (2012); ISBN: 978-0-12-415993-8
Guias de programação:
- NVIDIA Corporation. CUDA C++ Programming Guide (2024)
- Apache Spark.Apache Spark Programming Guides (2024)
Método de ensino
As aulas teóricas apresentam o programa da unidade curricular e promovem discussões sobre os seus tópicos mais relevantes, sendo estes consistentemente motivados e ilustrados com exemplos práticos. Os materiais das aulas (como slides) são disponibilizados antecipadamente, incentivando os estudantes a estudarem antecipadamente.
As sessões de laboratório decorrem num laboratório equipado com computadores que possuem processadores multicore, nos quais os alunos podem desenvolver e executar os exercícios de programação em memória partilhada. Para os exercícios de programação em GPU e arquiteturas de memória distribuída, os alunos têm acesso a um cluster composto por várias máquinas, cada uma equipada com mais de um processador multicore e muitas com GPUs da NVIDIA (necessárias para a programação em GPU com CUDA). Vários IDEs permitem a configuração de ambientes de execução remotos, possibilitando aos alunos trabalharem nos computadores do laboratório (ou nos seus próprios) enquanto compilam e executam o código remotamente no cluster.
Todos os exercícios laboratoriais são disponibilizados através de um repositório GIT, incluindo todas as dependências de software necessárias (exceto as linguagens de programação requeridas). Os exercícios também incluem testes automatizados para ajudar os alunos a verificar a correção das suas implementações.
Método de avaliação
Componente Teórico-Prática (CTP)
A componente teórico-prática (CTP) obtém-se através da realização de dois teses individuais durante o semestre, ou de um exame individual. Os testes e o exame serão presenciais e sem consulta. Tanto os testes como o exame poderão questões sobre os trabalhos práticos realizados neste ano letivo.
Limite mínimo: é exigida uma classificação CTP ≥ 8,50 valores.
Componente Laboratorial (CL)
A componente laboratorial (CL) obtém-se através da aplicação da seguinte fórmula: CL = 0.6 * CG + 0.4 * CI onde CG = classificação grupo e CI = classificação individual
A classificação de grupo (CG) é definida pelo mérito do desenvolvimento de 2 trabalhos práticos projeto de programação e elaboração de dois relatórios que descrevem, avaliam e analisam a solução desenvolvida. O projeto é desenvolvido em grupos de dois alunos e a classificação CG é idêntica para ambos os elementos do grupo.
A classificação individual (CI) é definida pelo mérito individual no processo de desenvolvimento dos trabalhos práticos de programação referido em CG. Esta componente é aferida ponderando a distribuição de trabalho entre os elementos do grupo, tal como reportada pelos alunos nos relatórios, com a quantidade, dificuldade e relevância de trabalho individual percecionado através de uma discussão com os alunos.
O critério para a obtenção de frequência é: CL >= 8.5
A frequência dos 2 anos anteriores é válida para o presente ano. No entanto, tal não impede que o aluno possa inscrever-se num turno prático e frequentar as aulas práticas. O aluno pode ainda tentar melhorar a nota obtida anteriormente. Nesse caso, a nota CL final será a melhor nota de entre a nota CL obtida este ano e a obtida anteriormente.
Classificação Final (CF): CF = 0.6 * CTP + 0.4 * CL
Conteúdo
Porquê a Computação Paralela
Fundamentos
- Arquiteturas Paralelas
- Modelos de Programação Paralela
- Conceção de Programas Paralelos
- Identificação de oportunidades de paralelização
- Decomposição paralela
- Análise de Dependências
- Escalonamento de Tarefas
- Comunicação
- Balanceamento de carga
- Desempenho
- Medidas de desempenho
- Leis de Amdahl e Gustafson-Barsis
Programação em Memória Partilhada
- Multicores
- Programação baseada em tarefas e em ciclos
- Acesso a estado partilhado
- GPUs
- Arquitetura GPU
- Programação de GPU
- Otimização de Desempenho
- Distribuição de trabalho
- Localidade
- Sobreposição de computação com comunicação
Computação Data Parallel
- Raciocínio Data Parallel
- Programação Data Parallel em multicore e GPU
- Frameworks de computação distribuída Data Parallel
- MapReduce, Spark
- Sistema de ficheiros distribuído
- Modelo de execução
- Otimização de Desempenho
- Distribuição e escalonamento
- Localidade e comunicação