Disciplina destinada aos alunos do Bacharelado em Astronomia. Os alunos do Bacharelado em Física também poderão cursar. O objetivo é fornecer ao aluno uma introdução aos métodos computacionais de uso corrente em Astronomia, com aplicações à solução de problemas. Em anos recentes houve grandes avanços em tecnologias da computação, com a disponibilização de clusters computacionais massivamente paralelos e de baixo custo e o surgimento de novas tecnologias, tais como GPUs. Esta disciplina visa introduzir as técnicas mais utilizadas em computação de alto desempenho, ensinando ao aluno como tirar melhor proveito dos recursos computacionais disponíveis.
1. Como um computador funciona: CPU, memória e ponto flutuante. 2. Vetorização: SSE (Streaming SIMD Extensions). 3. Conceitos de processamento paralelo: SIMD (Single Instruction Multiple Data) versus MIMD (Multiple Instructions Multiple Data). 4. Indrodução ao code profiling (análise de rendimento de código) 5. Introdução ao OpenMP 6. Introdução ao MPI 7. Introdução às GPUs (CUDA, OpenACC) 8. Introdução à vetorização
O curso aborda tópicos avançados de computação que visam capacitar o aluno a fazer uso das mais recentes tecnologias utilizadas em computação científica. Os três primeiros tópicos abaixo são tópicos teóricos que abordam conceitos fundamentais como o funcionamento de um computador e de um cluster de computadores. Os últimos quatro tópicos abordam as diferentes ferramentas de paralelização e otimização de código disponíveis, e serão desenvolvidos através de aulas práticas e teóricas. O curso baseia-se no método PBL (problem-based learning). Ao longo do semestre o aluno trabalhará em um problema específico e ao final apresentará seus resultados na forma de um Trabalho de Conclusão da Disciplina (TCD). 1. Como um computador funciona: CPU, memória e ponto flutuante. 2. Vetorização: SSE (Streaming SIMD Extensions). 3. Conceitos de processamento paralelo: SIMD (Single Instruction Multiple Data) versus MIMD (Multiple Instructions Multiple Data). 4. Indrodução ao code profiling (análise de rendimento de código) 5. Introdução ao OpenMP 6. Introdução ao MPI 7. Introdução às GPUs (CUDA, OpenACC) 8. Introdução à vetorização
- Culler, D. E., Pal Singh, J., 1998, Parallel Computer Architeture, A Hardware/Sofware Approach, Morgan Kaufmann (1st edition)- H. F. Jordan, G. Alaghband, 2002, Fundamentals of Parallel Processing, Prentice Hall- J. Sanders, 2010, CUDA by Example: An Introduction to General-Purpose GPU Programming, Addison-Wesley Professional (1st Edition)