Computação Paralela e Distribuída


Arquiteturas Avançadas (Sem. 1)

Objectivos de aprendizagem

Um estudante que complete com sucesso a UC deverá ser capaz de demonstrar que adquiriu as seguintes
competências:
-caracterizar e avaliar qualitativa e quantitativamente a arquitetura de sistemas de computação
paralelos/distribuídos
- analisar, medir e avaliar o desempenho de sistemas de computação na execução de aplicações
- desenvolver e/ou modificar aplicações computacionais com vista a optimizar o seu desempenho e
escalabilidade.

Conteúdos programáticos

1. Evolução recente da arquitetura de processadores: pipeline, superescalaridade, multi-threading, multi-core,
many-core; hierarquia de memória em ambiente partilhado
2. Evolução do paralelismo nas arquiteturas: arquiteturas vetoriais, arquiteturas paralelas com memória
partilhada e memória distribuída, arquiteturas distribuídas em rede; análise de desempenho em arquitcturas
massivamente paralelas, com destaque para as plataformas heterogéneas com as novas gerações de GPU's
3. Avaliação de desempenho na execução de aplicações: métricas, profiling, análise e afinação de código
(destaque para ciclos iterativos, manuseamento de matrizes e chamada de funções, localidade dos dados),
benchmarking

Metodologias de ensino e avaliação

Métodos de ensino:
- exposição teórica de conceitos com exemplos
- revisão e discussão de tópicos e artigos científicos
- palestras temáticas por investigadores em ciência computacional, para posterior seleção de temas a tratar no
projeto integrado
- análise e execução laboratorial de problemas experimentais, com apresentação oral e discussão pública dos
resultados
- participação em internship internacional, na UTexas em Austin
A classificação final será uma média ponderada de elementos de avaliação relativos às atividades acima
referidas:
- prova escrita individual para aferir os conhecimentos e as capacidades intelectuais adquiridos; peso ~40%
- trabalhos de análise e de síntese documental sobre temas complementares; peso ~20%
- trabalho prático laboratorial, com elaboração de relatório (em inglês) e apresentação e defesa de trabalhos;
peso ~40%.

Bibliografia

• David Patterson, John Hennessy, Computer Architecture. A Quantitative Approach, 5th Ed., Morgan
Kaufmann, 2011
• David Kirk and Wen-mei Hwu, Programming Massively Parallel Processors, A Hands-on Approach, Morgan
Kaufmann, 2010

Algoritmos Paralelos (Sem. 2)

Objectivos de aprendizagem

Um estudante que complete com sucesso esta UC deverá ser capaz de demonstrar que adquiriu as seguintes
competências:
• Apreender os fundamentos teóricos para suporte aos algoritmos analisados
• Identificar, a diferentes níveis (complexidade, robustez, eficiência, escalabilidade, etc.) pontos fortes e fracos
dos algoritmos analisados
• Desenvolver implementações sequenciais e paralelas e discutir os resultados de desempenho e eficiência
obtidos com os algoritmos analisados
• Identificar, nos algoritmos paralelos, eventuais problemas de balanceamento de carga e/ou elevados custos
de comunicação entre os elementos de computação

Conteúdos programáticos

• Algoritmos de pesquisa e ordenação: mergesort, quicksort e bitonic; técnicas de procura paralelas: depthfirst e breadth-first
• Algoritmos matriciais em ambientes paralelos heterogéneos: multiplicação de matrizes, sistemas de
equações lineares, valores próprios, matrizes densas e esparsas, métodos dos elementos finitos e dos
gradientes conjugados
• Otimização: grafos, e spanning trees; programação dinâmica, problemas knapsack
• Algoritmos genéticos paralelos em problemas de otimização/modelação.

Metodologias de ensino e avaliação

A UC é lecionada com uma sessão teórica de 2H e uma sessão laboratorial de 1H semanalmente.
Nas sessões teóricas são lecionados os fundamentos e conceitos. As sessões teóricas são essencialmente de
exposição de matéria.
Nas sessões laboratoriais são consolidados os conhecimentos adquiridos nas sessões teóricas, através da
resolução de exercícios. Os vários exercícios permitem aos alunos a consolidação dos conhecimentos através
do desenho e implementação de vários algoritmos paralelos. As sessões laboratoriais servirão ainda para
esclarecer dúvidas.
A avaliação é realizada através de um trabalho prático.

Bibliografia

Parallel Programming in C with MPI and OpenMP, Michael J. Quinn, McGraw-Hill Education, 2003
Parallel Metaheuristics: A New Class of Algorithms, Enrique Alba, Wiley, 2005

Engenharia dos Sistemas de Computação (Sem. 2)

Objectivos de aprendizagem

•Identificar os diferentes tipos de sistemas de computação, incluindo máquinas SMP, clusters e grids e
discutir as respectivas vantagens e limitações
•Analisar e avaliar os requisitos de hardware e software com vista ao planeamento e instalação do
equipamento
•Identificar os requisitos dos utilizadores necessários para selecionar o software a instalar e a manter
•Identificar e caracterizar políticas de gestão e escalonamento de trabalhos e avaliar os resultados da sua
aplicação
•Discutir e avaliar o desempenho efetivo de programas sequenciais e paralelos nas plataformas estudadas
•Identificar os pontos de estrangulamento do ambiente de execução (run-time) face a uma determinada carga
computacional.
•Usar as ferramentas existentes, ao nível do ambiente de execução, para estudar estratégias de optimização
dos recurso partilhados nas diferentes plataformas com vista a minimizar uma determinada função de custo
(por exemplo tempo de execução).

Conteúdos programáticos

•Introdução aos clusters: arquitetura (terminologia, tecnologias, limitações), equipamentos (componentes
individuais e de rede, coordenação de recursos descentralizados)
•Clusters computacionais Linux: características, instalação e configuração de serviços, segurança
•Planeamento e construção de clusters: missão, arquitetura e suporte lógico, sistemas de ficheiros paralelo,
tecnologias de interligação, clonagem e instalações
•Gestão de clusters: modelos para a submissão de tarefas, monitorização e administração de utilizadores e
recursos, políticas de escalonamento e contabilização, segurança de dados, análise de desempenho e
afinação
•Estudo de casos: desenvolvimento de estratégias de gestão.

Metodologias de ensino e avaliação

Exposição de conceitos e análise/discussão de casos de estudo.
Trabalho individuais e em grupo na resolução de exercícios de aplicação prática de conceitos, e na avaliação
de desempenho dos diferentes componentes, no binómio hardware/software.
Apresentação dos trabalhos, com ênfase na identificação de limitações, discussão de resultados e propostas
de extensões/alterações das soluções encontradas.
Método Geral de Avaliação:
• trabalhos individuais/grupo, com elaboração de relatório: 40% a 60%
• prova escrita individual de avaliação de conhecimentos adquiridos: 40% a 60%

Bibliografia

Beowulf Cluster Computing with Linux, William Gropp, Ewing Lusk, Thomas Sterling, 2nd Ed., The MIT Press,
2003
High Performance Linux Clusters with Oscar, Rocks, OpenMosix and MPI, Joseph Sloan, O'Reilly Media, Inc.,
2004
Computer Systems, A Programmer’s Perspective, R. E. Bryant, D. R. O’Hallaron. Prentice Hall 2011

Paradigmas de Computação Paralela (Sem. 1)

Objectivos de aprendizagem

Um estudante que complete com sucesso esta UC deverá ser capaz de demonstrar que adquiriu as seguintes
competências:
• Desenvolver aplicações paralelas capazes de executar numa gama alargada de arquiteturas
• Implementar aplicações utilizando os tipos mais comuns de algoritmos paralelos
• Medir e otimizar o desempenho de aplicações em sistemas de memória distribuída
• Implementar técnicas de gestão de recursos ao nível da aplicação.

Conteúdos programáticos

• Modelos de programação: fios de execução em memória partilhada, passagem de mensagens, objetos
distribuídos, workflows
• Metodologias de desenvolvimento de aplicações paralelas: partição, comunicação, agregação e mapeamento
de tarefas e dados
• Análise de algoritmos paralelos típicos: pipelining, farming, heartbeat e divide & conquer
• Medição e otimização do desempenho de aplicações em sistemas de memória partilhada e distribuída,
homogéneos e heterogéneos
• Linguagens e utilitários de apoio ao desenvolvimento de aplicações.

Metodologias de ensino e avaliação

A UC é lecionada com uma sessão teórica de 2H e uma sessão laboratorial de 1H semanalmente.
Nas sessões teóricas são lecionados os fundamentos e conceitos. As sessões teóricas são essencialmente de
exposição de matéria.
Nas sessões laboratoriais são consolidados os conhecimentos adquiridos nas sessões teóricas, através da
resolução de exercícios. Os vários exercícios permitem aos alunos a consolidação dos conhecimentos através
da aplicação de conhecimentos visando a resolução de uma dado problema e/ou interpretação de resultados.
As sessões laboratoriais servirão ainda para esclarecer dúvidas.
A avaliação é realizada através de um trabalho prático.

Bibliografia

Principles of Parallel Programming, Calvin Lin and Lawrence Snyder, Addison-Wesley, 2009
Parallel Programming in C with MPI and OpenMP, Michael J. Quinn, McGraw-Hill Education, 2003
Designing and Programming Parallel Programs: Concepts and Tools for Parallel Software Engineering, Ian
Foster, Addison-Wesley, 1995