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

Cursos

Cursos onde a unidade curricular é leccionada: