Faculdade de Ciências e Tecnologia

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 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

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 CUDA da NVIA

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 em programação (tem sido utilizada a linguagem C ou C++).

Conteúdo

  1. Computação de alto desempenho: hardware, software, aplicações e indicadores de desempenho.
  2. Programação de multiprocessadores de memória partilhada. OpenMP. Exemplos de aplicação.
  3. Computação usando GPUs. CUDA da Nvidia.
  4. Programação de clusters. MPI. Exemplos de aplicação.
  5. Programação paralela estruturada -- exemplos de padrões paralelos.

Bibliografia

Disciplina de especialização que fornece competências na área de High Performance Computing, i.e. estudo das metodologias/técnicas que permitem explorar arquiteturas hardware com múltiplos processadores, de modo a diminuir os tempos de execução de programas com necessidade de recursos de computação elevados. O curso inclui uma vertente aplicada/experimental com atividade laboratorial.  
Requisitos: conceitos básicos de arquitetura, redes e sistemas de operação.
Conhecimentos:
Arquiteturas de multiprocessadores
Técnicas de decomposição de problemas e padrões recorrentes de programação/execução paralelas
Linguagens, bibliotecas e ferramentas necessárias para as vários fases de desenvolvimento de um programa paralelo
Aptidões e competências:
Melhoria do desempenho de aplicações.
Utilização de ambientes de programação de multiprocessadores
Programação de multiprocessadores com C/C++, OpenMP, MPI e OpenCL/CUDA

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. Estão também acessíveis máquinas com arquitecturas heterogéneas (com CPU e GPUs Nvidia) para a programação de modelos de memória partilhada.

Método de avaliação

Lectures are intended to support the instructor’s presentation of fundamental issues.
Laboratory sessions take place in a general-purpose laboratory with PC-based multi-core nodes for shared memory and distributed-memory programming. Access to machines with heterogeneous architectures (CPus and GPUs Nvidia) for shared memory programming.

Cursos