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.
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
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%.
• 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
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
• 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.
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.
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
•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).
•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.
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%
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
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.
• 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.
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.
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