Departamento de Informática (UM)

Página de Unidade Curricular

DesignaçãoCódigoCursoRegimeRegente

Programação Paralela

14966 [J905N5]

Licenciatura em Engenharia Física [ENGFIS]

S1

Alberto José Gonçalves Carvalho Proença

Objetivos

Os conteúdos programáticos abordam os aspetos mais relevantes da computação paralela, incluindo os modelos, metodologias e técnicas de otimização de desempenho mais relevantes. Deste modo, os conteúdos programáticos permitem aos estudantes obterem as competências pretendidas.

Programa

1. Análise da arquitetura de processadores genéricos, ao nível do ILP e de outras formas de paralelismo (em ambiente de memória partilhada/distribuída) e na hierarquia de memória.

2. Análise e avaliação de sistemas de computação paralelos de memória partilhada e sistemas de memória distribuída.
3. Metodologia e modelos de programação paralela: fases: partição, comunicação, aglomeração e mapeamento; programação em ambiente multi-threaded, ferramentas (inc. OpenMP) e linguagens; a comunicação de mensagens em ambiente de memória distribuída (inc. MPI).
4. Projeto de aplicações paralelas, foco na computação científica, contendo: algoritmos paralelos típicos (pipelining, farming, heartbeat e divide & conquer).
5. Medição e otimização de desempenho de aplicações paralelas: impacto da granularidade na computação/comunicação; estratégias de distribuição de cargas computacionais e de dados.

Bibliografia

Patterson, D. John Hennessy, J. (2013). Computer Organization and Design: The Hardware/Software Interface, 5th Ed., Morgan Kaufmann

McCool, M., Robison, A. D., Reinders, J. (2012). Structured Parallel Programming Patterns for Efficient Computation, Morgan Kaufmann

Quinn, M. J. (2003). Parallel Programming in C with MPI and OpenMP, McGraw-Hill Education

Foster, F. (1995). Designing and Programming Parallel Programs: Concepts and Tools for Parallel Software Engineering, Ian Addison-Wesley

Resultados da aprendizagem

Esta UC tem como objetivo desenvolver competências em computação paralela, nomeadamente:

- Caracterizar e avaliar qualitativa/quantitativamente sistemas computacionais e respetivas unidades de computação
- Identificar e caracterizar os principais paradigmas de programação paralela existentes, nomeadamente a programação com memória partilhada e a programação em memória distribuída com comunicação de mensagens
- Desenvolver e melhorar a eficiência da execução de aplicações em arquiteturas paralelas, com ênfase na computação científica

Método de avaliação

A avaliação é realizada através de um teste escrito (peso de 30% a 40%) e de um trabalho prático (peso 60% a 70%).

Funcionamento

Turno: T 1; Docente: Alberto José Gonçalves Carvalho Proença; Dep.: DI; Horas: 30.
Turno: PL 1; Docente: André Martins Pereira; Dep.: DI; Horas: 30.
Turno: PL 2; Docente: André Martins Pereira; Dep.: DI; Horas: 30.

[ Outras UCs do Departamento ]