Computação Paralela e Distribuída
Código
8302
Unidade Orgânica
Faculdade de Ciências e Tecnologia
Departamento
Departamento de Informática
Créditos
6.0
Professor responsável
Pedro Abílio Duarte de Medeiros
Horas semanais
4
Total de horas
56
Língua de ensino
Português
Objectivos
Motivação
Com a rápida evolução das tecnologias de construção dos processadores, das memórias e do suporte físico às comunicações, as arquitecturas dos sistemas de computadores evoluiram, nos últimos 20 anos, resultando em sistemas que actualmente são constituídos por múltiplos processadores (na ordem das dezenas, centenas e milhares de elementos autónomos), estando estes sistemas cada vez mais disponíveis ao comum dos utilizadores, seja nível do computador pessoal (com 2, 4 ou brevemente 8 ou mais processadores) até aos sistemas mais caros (e com mais processadores) que são no entanto facilmente acessíveis via Internet. Toda esta evolução motivou as comunidades científica e industrial para explorarem a possibilidade de execução paralela das aplicações, visando obter maior desempenho (menor tempo de execução) e serem capazes de explorar problemas mais exigentes, tais como simulações complexas (em Medicina, Biologia, Física, Meteorologia, etc) que seria impossível de executar nos computadores tradicionais em computações sequenciais.
Esta disciplina estuda os problemas da computação paralela, que permitem tirar partido das novas arquitecturas de múltiplos processadores.
Descrição dos objecti vos
Visão unificada do processamento concorrente, paralelo e distribuído, estudando aplicações, abstracções fundamentais, sistemas de suporte à execução e algoritmos paralelos e distribuídos.
A disciplina estuda uma perspectiva global da computação paralela e distribuída, centrada nos modelos, algoritmos e sistemas para a resolução de problemas que envolvam exploração da concorrência, da distribuição e do paralelismo. As múltiplas dimensões são apresentadas de uma forma integrada, que abrange os modelos e os algoritmos distribuídos e paralelos, as abordagens para a sua programação e para a sua implementação em arquitecturas paralelas e distribuídas (incluindo os sistemas de múltiplos processadores baseados em multi-core, multiprocessadores simétricos, sistemas com espaços de endereços uniformes e controlo da coerência das Caches, sistemas de espaços não uniformes e sistemas baseados em clusters de computadores). Faz um estudo comparativo das abordagens existentes para a resolução paralela e distribuída de problemas. Estudam-se os modelos de programação e os ambientes que suportam a sua implementação em arquitecturas paralelas e distribuídas.
Esta disciplina promove uma forte articulação entre a teoria e a prática e na qual a participação dos alunos, nas teóricas como nas práticas é essencial (consulte a secção que descreve o Programa).
Objectivos mais específicos
Saber
- Identificar modelos abstractos para a resolução paralela e distribuída de problemas
- Saber os paradigmas para desenvolver algoritmos paralelos e distribuídos
- Avaliar a correcção e desempenho daqueles algoritmos
- Identificar os algoritmos e padrões de resolução típicos para diversas classes de aplicação
Fazer
- Utilizar ferramentas e ambientes para o desenvolvimento de aplicações paralelas e distribuídas
- Implementar algoritmos paralelos e distribuídos em sistemas de multiprocessadores e clusters de computadores
Soft-Skills
- Raciocionar e avaliar criticamente as alternativas de solução e abordagens para a resolução de problemas.
Pré-requisitos
- Cadeiras ao nível do 1º ciclo em Arquitectura de Computadores, Sistemas Operativos e Redes de Computadores
- Proficiência em C/C++ e Java
Conteúdo
1. Introdução: Arquitecturas paralelas, modelos fundamentais para a sua programação, estratégias para
2. Arquitecturas paralelas e distribuídas (dos multiprocessadores de memória partilhada e distribuída (incluindo os baseados em multi-cores, os multiprocessadores simétricos - SMP, os sistemas com espaços de endereços uniformes e coerência de Cache - CC-NUMA, os sistemas com espaços de endereços não uniformes - NORMA), aos clusters de computadores e redes locais até às infraestruturas distribuídas)
3. Modelos de computação paralela e distribuída (Decomposição, cooperação e coordenação. Modelos de comunicação. Modelos de distribuição. Modelos de paralelização. Carácter dinâmico das computações: falhas / recuperação de processos e comunicações; situações de reconfiguração dinâmica. Transparência na concorrência, na distribuição e no paralelismo.)
4. Algoritmos paralelos e distribuídos (Computações paralelas: decomposição e granularidade. Algoritmos paralelos e distribuídos: correcção e desempenho dos programas. Estudo das principais classes de algoritmos. Computações paralelas em sistemas distribuídos na presença de incerteza: como aplicar os mecanismos de observação de estados globais e de sincronização de processos distribuídos neste contexto )
5. Modelos de programação e ambientes de desenvolvimento (Linguagens de programação, bibliotecas e middleware de suporte, utensílios e ambientes de desenvolvimento para multiprocessadores e clusters)- Paradigmas de programação paralela e linguagens para sistemas heterogéneos de múltiplos processadores.
Bibliografia
- G. R. Andrews, Foundations of Multithreaded, Parallel and Distributed Programming, Addison-Wesley, 2000.
- B. Wilkinson, M. Allen, Parallel Programming: Techniques and Applications Using Networked Workstations and Parallel Computers 2nd Ed,Prentice Hall, 2005
- M. Ben.Ari, Principles of Concurrent and Distributed Programming, Prentice-Hall, 1990
- A.S. Tanenbaum, M. Van Steen, Distributed Systems: Principles and Paradigms, Prentice-Hall. 2007
- N. Matloff, Programming on Parallel Machines, disponível em http://heather.cs.ucdavis.edu/~matloff/158/PLN/ParProcBook.pdf
- Artigos e tutoriais a indicar
Método de ensino
Esta é uma disciplina em que se promove uma forte articulação entre a teoria e a prática e na qual a participação dos alunos, nas teóricas e nas práticas, é essencial para se atingir o objectivo central. Nas aulas teóricas expõem-se e discutem-se os conceitos e técnicas. Nas práticas laboratoriais exercita-se a sua aplicação, dando iniciativa ao aluno para conceber soluções dos problemas propostos.
Método de avaliação
Nota final
- Nota Final = 0.55*NT+0.45*NP em que NT é a componente teórico prática obtida por testes ou exame de recurso. NP é a parcela resultante da avaliação da componente prática laboratorial.
- NT:
- obtida através de 2 testes, realizados ao longo do semestre, ou através do exame de recurso
- os testes e o exame de recurso são sem consulta, e cobrem as matérias teórica e prática
- Se optar por fazer a avaliação por testes: NT = 0.5* NT1+0.5*NT2 (NT1 e NT2 são as notas dos testes).
- NP:
- Práticas laboratoriais: realização de 3 trabalhos, por grupos de 2 alunos.
Obtém-se a nota final da prática laboratorial NP numa escala de 0 a 20. NP = (N1+N2+N3) /3 em que Ni é a nota obtida no trabalho Ni. Para os trabalhadores estudantes a data de entrega dos trabalhos é igual à dos outros alunos.
- Para os alunos que obtiveram frequência na disciplina em anos anterioes a nota final é NT. Idem para quem foi aprovado em anos anteriores e pretenda fazer melhoria
- Os alunos aprovados na avaliação contínua em 2012/2013 podem fazer Melhoria de nota inscrevendo-se na Repartição Académica para o efeito, no exame de recurso. Neste caso, Nota Final = 0.55*NT+0.45*NP Neste caso NT é a nota do exame
Cursos