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 HPC relevante para a comunidade científica - analisar, medir e avaliar o desempenho de sistemas de computação na execução de aplicações com requisitos de computação intensiva - analisar e modificar aplicações computacionais de ciência/engenharia com vista a optimizar o seu desempenho e escalabilidade.
1. Sequential Computing 1.1 The Von Neumann architecture 1.2 Numerical data representation 1.3 Memory Hierarchies 1.4 Multicore architectures 1.5 Locality and data reuse 1.6 Programming strategies for high performance 1.7 Performance metrics and measurement techniques 2 Parallel Computing 2.1 Instruction Level Parallelism 2.2 Parallel Computers Architectures 2.3 Different types of memory access 2.4 Interconnection topologies 2.5 Granularity of parallelism 2.6 Parallel programming 2.7 Performance evaluation 2.7 Efficiency of parallel computing 2.8 Multi-threaded architectures 2.9 GPU computing 3 Case study analysis
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
- Explicar em contexto os conceitos de Modelação e Simulação. - Aplicar algoritmos e métodos numéricos de análise numérica aplicada a um conjunto pequeno mas representativo de problemas de Física Computacional. - Discutir a complexidade dos algoritmos e da sua implementação eficiente num ambiente de programação paralela usando hardware heterogéneo (multicore CPU, multicore CPU-GPU, etc.). - Resolver 3 Case studies de complexidade controlada usando métodos de Monte Carlo, resolução numérica de equações diferenciais parciais e Análise de Fourier. - Compreender e discutir a complexidade dos algoritmos, do ponto de vista da implementação eficiente numa perspectiva de e-Ciência. - Compreender e discutir as questões que a Modelação e Simulação procuram responder, do ponto de vista do significado físico das soluções. - Adquirir, através do exemplo, a capacidade de trabalhar num ambiente multidisciplinar.
1. Física Computacional e e-Ciência, definições e questões. Modelos, simulação e experiências computacionais, variáveis adimensionais; consequências da representação interna e dos algoritmos. 2. Monte-Carlo: geração de números aleatórios. Aleatoridade determinística. Aplicações com um modelo de termodinâmica. Métodos de amostragem. Aplicações em problemas de difusão. 3. Equações diferenciais parciais (PDEs): potenciais electrostática e propagação de ondas. Maxwell: ondas EM e o algoritmo FDTD. 4. Difusão: integração numérica da equação de difusão e condições fronteira. 5. Análise de Fourier de oscilações não lineares. Algoritmo FFT. Solução em série de Fourier da equação de Laplace .
A transmissão de conteúdos será feita com exposição, escrita no quadro e resolução de pelo menos três Case studies, em grupos de 2 a 4 pessoas. Os materiais de apoio das aulas são disponibilizados através da plataforma de e-learning. A avaliação será feita através da apresentação pública e discussão em privado dos Case studies realizados em grupo.
[1] R.H.Landau, M.J. Paez, C.C. Bordeianu, A Survey of Computational Physics, Introductory Computational Science, Princeton University Press, 2008. [2] P.O.J. Scherer, Computational Physics, Simulation of Classical and Quantum Systems, Springer, 2010. [3] D. Frenkel, B. Smit, Understanding Molecular Simulations, From Algorithms to Applications, Academic Press, 2002. [5] M. Quinn, Parallel Programming in C with MPI and OpenMP, McGraw-Hill, 2003. [6] D.B. Kirk, W.W. Hwu, Programming Massively Parallel Processors: A Hands-on Approach, Nvidea, Morgan Kaufmann, 2010. [7] William H. Press, Saul A. Teukolsky,William T. Vetterling, Brian P. Flannery, Numerical Recipes: The Art of Scientific Computing,3rd. Ed., Cambridge, 2007.
Um estudante que complete com sucesso esta UC deverá ser capaz de demonstrar que adquiriu as seguintes competências: • Identificar as técnicas existentes para o armazenamento e processamento de dados em larga escala • Aplicar técnicas de extração de conhecimento sobre dados em contínuo (streams) • Utilizar ferramentas/bibliotecas comuns para processamento e análise de dados em larga escala e em contínuo • Desenvolver/implementar algoritmos de processamento paralelo e distribuído de dados
• Conceitos de extração de conhecimento, aprendizagem automática e mineração de dados: clustering, regras de associação, modelos de classificação e regressão, algoritmos de indução de árvores e regras, redes neuronais artificiais, máquinas de vector de suporte,avaliação/estimação de erro de modelos de aprendizagem, meta-aprendizagem: seleção de modelos,conjuntos de modelos • Mineração de dados em stream; processamento de streams; técnicas de agregação de dados; stream clustering; deteção de alterações em streams; aplicações a dados em contínuo (e.g. mercados financeiros) • Mineração de grafos e redes • Sistemas de armazenamento dados em larga escala: armazenamento de dados não estruturados; grelhas de dados; computação e armazenamento na nuvem; Processamento paralelo/distribuído de dados • Casos de estudo de análise de dados científicos em larga escala: análise de dados ómicos em Biologia Computacional; análise de dados financeiros • Visualização de dados: princípios e 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 do desenho e implementação de vários algoritmos para análise e processametno de dados. As sessões laboratoriais servirão ainda para esclarecer dúvidas. A avaliação é realizada através de um trabalho prático.
Data Mining. Pratical Machine Learning tools and techniques. (third edition) Ian Witten & Eibe Frank, Morgan Kaufman 2011. Knowledge Discovery from Data Streams J. Gama (2010), Chapman & Hall/CRC Press Scientific Data Mining and Knowledge Discovery: Principles and Foundations, Mohamed Medhat Gaber, Springer, 2009
Um estudante que complete com sucesso esta UC deverá ser capaz de demonstrar que adquiriu as seguintes competências: • Apreender os fundamentos teóricos matemáticos e numéricos para suporte aos métodos estudados • Identificar, a diferentes níveis (complexidade, robustez numérica, etc.) pontos fortes e fracos dos métodos • Desenvolver implementações sequenciais e paralela, usar bibliotecas numéricas e discutir os resultados de desempenho e eficiência obtidos • Identificar, nos algoritmos numéricos paralelos, eventuais problemas de balanceamento de carga e/ou elevados custos de comunicação entre os elementos de computação
• Métodos de Monte Carlo: geradores sequenciais e paralelos de números aleatórios, aplicações do método de Monte Carlo • Multiplicação de matrizes: implementações sequenciais, implementações paralelas no modelo messagepassing • Sistemas de equações lineares: método de eliminação de Gauss, métodos iterativos, análise da convergência, implementações sequenciais e paralelas • método das diferenças finitas: resolução numérica das equações diferenciais que ocorrem em certos problemas "clássicos" (vibração de uma corda, difusão de calor) • Transformada rápida de Fourier: análise de Fourier, as transformadas DDT (discreta) e FFT, algoritmos sequenciais e paralelos.
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 implementação de vários algoritmos numéricos. As sessões laboratoriais servirão ainda para esclarecer dúvidas. A avaliação é realizada através de um trabalho prático e de um teste escrito.
Parallel Scientific Computing in C++ and MPI: A Seamless Approach to Parallel Algorithms and their Implementation, George Em Karniadakis and Robert M. Kirby II, Cambridge University Press, 2003 Matrix Computations, G. Golub, C. F. Van Loan, 3rd. Ed., John Wiley & Sons, 1996