Computação Paralela
Ano Letivo: 2015/16
Departamento: Informática
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é-requisitosConteú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