Computação de Alto Desempenho (11165)
Computação de Alto Desempenho (2017/2018) - Departamento de Informática
A disciplina introduz metodologias e técnicas que permitem explorar arquiteturas hardware com múltiplos processadores e heterogéneas, tendo como principal objectivo fornecer competências na área de "High Performance Computing". Em particular, a disciplina estuda como diminuir os tempos de execução de programas com necessidade de recursos de computação elevados.
Para tal, são apresentadas as arquitecturas de multiprocessadores e heterogéneas existentes e são descritas técnicas de decomposição de problemas adequadas a essas arquitecturas alvo. Na vertente aplicada e experimental da disciplina, há atividades laboratoriais utilizando linguagens comuns de programação de multiprocessadores e ambientes heterogéneos (CPUs e GPUs Nvidia), bem como ferramentas de medida de desempenho de multiprocessadores e de clusters.
Arquiteturas de multiprocessadores e arquiteturas heterogéneas (CPU e GPUs)
Técnicas de decomposição de problemas
Linguagens, bibliotecas e ferramentas necessárias para as vários fases de desenvolvimento de um programa paralelo
Otimização do desempenho de um programa sequencial
Utilização de ferramentas de medida de desempenho de multiprocessadores e de clusters
Programação de multiprocessadores usado C/C++, OpenMP, MPI e CUDA da NVIA
Raciocionar e avaliar criticamente as alternativas de solução e abordagens para a resolução de problemas.
Computação de alto desempenho: hardware, software, aplicações e indicadores de desempenho.
Programação de multiprocessadores de memória partilhada. .
Computação usando GPUs.
Programação de clusters.
P. Pacheco, " An Introduction to Parallel Programming", Morgan Kauffman, 2011
CUDA C Programming Guide, NVIDIA corporation
Norm Matloff, "Programming on Parallel Machines: GPU, Multicore, Clusters and More", University of California, Davis,
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 utilizada a linguagem C ou C++).