Computação Paralela e Distribuída
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Engenharia Informática e Computação |
Ocorrência: 2021/2022 - 2S 
Ciclos de Estudo/Cursos
Sigla |
Nº de Estudantes |
Plano de Estudos |
Anos Curriculares |
Créditos UCN |
Créditos ECTS |
Horas de Contacto |
Horas Totais |
L.EIC |
233 |
Plano Oficial |
3 |
- |
6 |
52 |
162 |
Docência - Responsabilidades
Língua de trabalho
Português - Suitable for English-speaking students
Objetivos
Dotar os estudantes com:
- conhecimentos conducentes à utilização simultânea de várias unidades de processaento num sistema de computação;
- bases sólidas sobre paralelização de algoritmos, modelos de programação, sincronização de processos e medidas de desempenho, através do desenvolvimento de programas;
- conhecimentos teóricos sobre sistemas distribuídos para que possam tomar decisões correctas quando confrontados com a necessidade de conceber/desenvolver/administrar um sistema ou aplicação distribuídos;
- experiência de programação para que possam desenvolver aplicações distribuídas.
Resultados de aprendizagem e competências
Após conclusão desta UC, os estudantes deverão ser capazes de:
- Analisar um problema e identificar o modelo de paralelização mais adequado;
- Escrever programas segundo o modelo de memória partilhada;
- Elaborar soluções paralelas para novos problemas;
- Utilizar modelos computacionais para estimar o tempo de computação das aplicações;
- Conhecer boas práticas para efetuar partilha de recursos entre processos concorrentes;
- Explicar as implicações da latência de comunicação, falhas parciais e assincronia numa aplicação distribuída;
- Implementar uma aplicação distribuída quer recorrendo a "threads" quer usando uma abordagem orientada a eventos;
- Identificar os riscos de segurança em aplicações distribuídas que podem ser mitigados por canais seguros;
- Identificar os protocolos e mecanismos criptográficas necessários para a implementação desses canais;
- Identificar aplicações práticas de algoritmos básicos de sincronização, como eleições, e explicar porque pequenas alterações nesses algoritmos, podem quebrá-los;
- Explicar o funcionamento de algoritmos básicos de tolerância a falhas e das garantias por eles dadas;
- Compreender a utilidade e o desafio da replicação de dados/serviços em aplicações distribuídas;
- Avaliar os compromissos entre desempenho, tolerância a falhas e consistência em serviços replicados.
Modo de trabalho
Presencial
Pré-requisitos (conhecimentos prévios) e co-requisitos (conhecimentos simultâneos)
Sistemas Operativos
Redes de Computadores
Programa
Introdução à computação paralela. Medidas de desempenho.
Máquinas paralelas. Organização de memória e efeito da gestão da memória cache no desempenho do processador.
Limitações da computação paralela (Amdahl Law).
Tipos de paralelismo: funcional, de dados e em “streams”. Metodologias para paralelização de algoritmos.
Modelos de programação paralela: Memória Partilhada e Memória Distribuída.
Problemas de concorrência. Programação de multi-cores pelo modelo de memória partilhada utilizando OpenMP. Modelos de Computação.
Introdução à computação distribuída.
Modelos de comunicação: troca de mensagens, invocação remota de funções. Comunicação multicast.
Segurança na comunicação. Ameaças e ataques. Canais de Comunicação seguros.
Processamento em sistemas distribuídos. Serviços com manutenção de estado. Implementações concorrentes baseadas em eventos vs. “threads”.
Tolerância a falhas. Algoritmos de eleição. Protocolo “two-phase commit”. Protocolo primário-apoio ("primary-backup").
Técnicas básicas para aumentar a escalabilicade. Estudo de caso: Domain Name System (DNS).
Bibliografia Obrigatória
M. van Steen and A. S. Tanenbaum;
Distributed systems, 3rd Ed., 2017 (https://www.distributed-systems.net/index.php/books/ds3/)
Bibliografia Complementar
Michael J. Quinn;
Parallel programming in C with MPI and openMP. ISBN: 007-123265-6
George Coulouris;
Distributed systems. ISBN: 0-201-61918-0
Andrew S. Tanenbaum;
Distributed systems. ISBN: 0-13-613553-6
Ruud van der Pas, Eric Stotzer, Christian Terboven; Using OpenMP—The Next Step: Affinity, Accelerators, Tasking, and SIMD, MIT Press, 2017. ISBN: 9780262534789
Métodos de ensino e atividades de aprendizagem
As aulas teóricas são de exposição. Sempre que necessário, exemplos que ajudem à compreensão dos tópicos serão apresentados. A matéria exposta segue de perto a bibliografia principal recomendada. Para complementar, em tópicos muito pontuais, serão fornecidos apontamentos ou artigos.
Ao longo do semestre serão propostos problemas de programação e outros para consolidação dos conceitos apresentados nas aulas teóricas. Estes problemas serão discutidos nas aulas teórico-práticas, mas espera-se que os estudantes os resolvam fora das aulas. Os estudantes deverão ainda realizar 2 pequenos projetos, onde deverão aplicar os conceitos apresentados nas aulas teóricas.Software
JDK
git
Tipo de avaliação
Avaliação distribuída com exame final
Componentes de Avaliação
Designação |
Peso (%) |
Exame |
55,00 |
Trabalho prático ou de projeto |
45,00 |
Total: |
100,00 |
Componentes de Ocupação
Designação |
Tempo (Horas) |
Estudo autónomo |
60,00 |
Frequência das aulas |
52,00 |
Trabalho laboratorial |
50,00 |
Total: |
162,00 |
Obtenção de frequência
Não ultrapassagem do número limite de faltas .
Fórmula de cálculo da classificação final
min( 0,45 PP + 0,55ET, 1.15PP, 1.15ET)
onde:
PP - Nota global dos projetos
ET - Classificação do Exame Teórico
Avaliação especial (TE, DA, ...)
Idêntica à dos estudantes em regime normal.
Os estudantes em regime especial devem contactar o regente da unidade curricular para agendarem as datas da avaliação referentes ao projecto.
Melhoria de classificação
A melhoria da classificação do exame teórico é realizada mediante submissão a outro exame teórico semelhante ao da época normal (e com o mesmo peso) nas épocas previstas para o efeito.
A melhoria da classificação do projecto final só pode ser realizada na ocorrência seguinte da UC.
Observações
As aulas poderão ser dadas em Inglês se houver estudantes que não sabem português.