Oferta Formativa - Sinopse

Computação Paralela

Código: 425114
Ano Letivo: 2015/16
Departamento: Informática
ECTS:
Carga horária: 
Área Científica: Informática; 

Objetivos da Unidade Curricular

Pretende-se com esta disciplina que o aluno solidifique noções fundamentais relativas à computação concorrente em sistemas de memória partilhada e à computação paralela em sistemas com troca de mensagens. Pretende-se ainda que estas noções sejam complementadas com outras mais avançadas sobre memória transacional, arquitecturas multi-processador, arquitecturas do tipo aglomerado e estratégias para a paralelização de código.

Serão utilizados exemplos práticos para ilustrar as técnicas apresentadas. A disciplina inclui o desenvolvimento de projetos de aplicação dos conceitos de programação concorrente e paralela. Em particular, os alunos serão expostos às linguagens de programação C e Java e vão utilizar a biblioteca de programação PThreads e um contexto de programação MPI.


Pré-requisitos

Sem pré-requisitos

Conteúdos

Fundamentos da computação concorrente em sistemas de memória partilhada. Fundamentos de computação paralela em sistemas de troca de mensagens. Aplicação de técnicas de programação concorrente e paralela. Tendências na computação concorrente e paralela.

 

Descrição detalhada dos conteúdos programáticos

Componente Teórica

Nas aulas teóricas serão abordados os seguintes tópicos: Programação sequencial vs. paralela vs. concorrente; Exclusão mútua; Algoritmos de Peterson, Filter e Bakery; Objectos concorrentes; Linearização; Consistência sequencial; Fundamentos de memória partilhada; Registos de fraca consistência, regulares e atómicos; Primitivas de sincronização; Memória transaccional; Computadores paralelos; Redes de interligação; Paralelização de código; Modelos de programação; Aceleração e Lei de Amdahl; Fundamentos de troca de mensagens; Primitivas de suporte à paralelização; Determinação do tempo de execução; Análise de complexidade; Avaliação de programas paralelos; Computações "idealmente" paralelizáveis; Particionamento; Condutas; Computações sincronizadas; Distribuição de calor; Balanceamento de carga; Deteção de terminação; Computação em aglomerados, grelhas e na nuvem.

 

Componente Teórica-Prática

Na sua componente prática os alunos realizam trabalhos utilizando bibliotecas de suporte à programação concorrente (Pthreads), linguagens com suporte explícito à concorrência (Java) e bibliotecas para programação baseada em troca de mensagens (MPI).

 

Bibliografia

Recomendada

Parallel Programming: Techniques and Applications Using Networked Workstations and Parallel Computers. Barry Wilkinson, Michael Allen. Prentice-Hall. 2ed 2004)

The Art of Multiprocessor Programming. Maurice Herlihy, Nir Shavit. Morgan Kaufmann. 2008)

 

Outros elementos de estudo

Slides das Aulas Teóricas, Mário Calha, DI-FCUL, 2010.

Slides das Aulas Teórico-Práticas, Mário Calha, DI-FCUL, Outubro 2007.

 

Métodos de Ensino

Aulas teóricas: exposição da matéria em sala de aula, complementada pela apresentação e discussão de publicações científicas pelos alunos. Desta forma procura-se estimular o debate em sala de aula.

Aulas teórico-práticas: exposição da matéria em sala de aula, complementada pela realização de exercícios teórico-práticos e laboratoriais. Utilização de métodos interactivos que fomentam a discussão de soluções.

 

Métodos de Avaliação

Trabalhos de casa. Desenvolvimento de dois projetos. Exame final.

 

Língua de ensino

Português ou Inglês