Computação Paralela e Distribuída
-
Conhecimentos de Base Recomendados
É desejável que os estudantes tenham conhecimento prévio de linguagens e ambientes de programação e sistemas operativos incluindo algoritmos de escalonamento. Noções de programação REST para a web devem ser adquiridas se não existentes.
-
Objetivos
Os estudantes deverão ser capazes de conhecer e compreender as técnicas e paradigmas da computação paralela e distribuída de modo a conceber algoritmos e aplicações multithread que envolvam comunicação entre computadores.
Enuncia e compara diversas topologias de redes de computadores e descreve corretamente o funcionamento das redes locais (cabeadas ou não) e da Internet e dos paradigmas cliente/servidor e peer-to-peer.
Enuncia os diversos modelos da computação paralela e da computação distribuída.
Programa e descreve o funcionamento dum programa que utiliza técnicas de multiprogramação como semáforos.
Programa aplicações para computadores que façam uso dos recursos do computador de forma eficiente usando e dominando técnicas de multiprogramação e sincronização de threads/processos e programação paralela a partir dum problema.
Resolve problemas da sua área recorrendo a diferentes abordagens da computação paralela e distribuída. -
Métodos de Ensino
Aulas TP: As aulas TP recorrerão à demonstração e resolução de situações potencialmente problemáticas com recurso a meios computacionais, com vista à introdução das diferentes técnicas de programação paralela e distribuída que compõem o conteúdo programático da UC.
Aulas Práticas: resolução de exercícios de uma forma mais autónoma, num ambiente de desenvolvimento, sendo possível o aluno utilizar o próprio computador se desejar.
Elaboração de trabalhos práticos ao longo do semestre, certificadores das várias técnicas lecionadas. -
Estágio(s)
Não
-
Programa
Aulas Teórico/Práticas
1. Introdução à computação paralela
2. Arquitecturas de sistemas paralelos
3. Programação com bibliotecas de computação paralela
4. Introdução aos sistemas distribuídos
5. Computação paralela vs computação distribuída
6. Modelos e arquitecturas de sistemas distribuídos
7. Networking e protocolo TCP/IP
8. Transacções, falhas e segurança
9. Web Services e Cloud Computing
Aulas Laboratoriais
0. Conceitos importantes da linguagem Python
1. Vetores e Matrizes em Python
2. Introdução ao Paralelismo em Python
3. Utilização de Threads
4. Utilização de Processos
5. Pipelining
6. Pthreads e OpenMP
7. Aplicações com Sockets
8. Aplicações com Sockets (continuação)
9. Webservices
10. Webservices (continuação) -
Demonstração de conteúdos
-
-
Demonstração da metodologia
-
-
Docente(s) responsável(eis)
Luís Miguel Lopes de Oliveira Esteves - 2.º Semestre
-
Bibliografia
Kai Hwang, Geoffrey C. Fox, Jack J. Dongarra; Distributed and Cloud Computing - From Parallel Processing to the Internet of Things, 2012
Tanenbaum Andrew; Distributed Systems: Principles and Paradigms, 2017
C. Lin, L. Snyder; Principles of Parallel Programming, 2009. ISBN: 978-0-321-48790-2
T. Rauber, G. Runger; Parallel Programming for Multicore and Cluster Systems, 2013. ISBN: 978-3-642-37801-0
Detalhes do curso
-
Código
INF32208
-
Modo de Ensino
PRESENCIAL
-
ECTS
6.0
-
Duração
Semestral
-
Horas
30h Práticas e Laboratórios
23h Teórico-Práticas
