
Computação de Alto Desempenho
Código
11165
Unidade Orgânica
Faculdade de Ciências e Tecnologia
Departamento
Departamento de Informática
Créditos
6.0
Professor responsável
Maria Cecília Farias Lorga Gomes, Pedro Abílio Duarte de Medeiros
Horas semanais
4
Total de horas
56
Língua de ensino
Português
Objectivos
Saber:
- Arquiteturas de multiprocessadores
- Técnicas de decomposição de problemas
- Linguagens, bibliotecas e ferramentas necessárias para as vários fases de desenvolvimento de um programa paralelo
Saber Fazer:
- 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 OpenCL
Soft-Skills:
- Raciocionar e avaliar criticamente as alternativas de solução e abordagens para a resolução de problemas.
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 na programação em C/C++ e Java.
Conteúdo
- Computação de alto desempenho: hardware, software, aplicações e indicadores de desempenho.
- Programação de multiprocessadores de memória partilhada. OpenMP. Exemplos de aplicação.
- Computação usando GPUs. OpenCL/CUDA.
- Programação de clusters. MPI. Exemplos de aplicação.
- Programação paralela estruturada -- abstracções e modelos estruturados para a programação paralela, e linguagens, bibliotecas e ferramentas que os suportam.
Bibliografia
Principal:
- B. Wilkinson, M. Allen, “Parallel Programming: Techniques and Applications Using Networked Workstations and Parallel Computers (2nd Edition)”, Prentice-Hall 2004
Complementar:
- P. Pacheco, " An Introduction to Parallel Programming", Morgan Kauffman, 2011
- G. Hager, G. Wellein, “Introduction to High Performance Computing for Engineers and Scientists”, CRC Press, 2011
- B. Gaster, L. Howes, D. Kaeli and P. Mistry, "Heterogeneous Computing with OpenCL", Morgan Kauffman, 2011
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) quer para a programação de memória partilhada quer para a de memória distribuída. Um cluster dedicado é também utilizado na disciplina, permitindo o acesso a ferramentas de gestão e monitorização que não estão disponíveis no laboratório de uso geral.