Pular para o conteúdo

Programa de Verão do LNCC · 2026

Escola Supercomputador Santos Dumont

26 de janeiro a 06 de fevereiro de 2026

Evento online

Apresentação

Sobre o evento

O Supercomputador Santos Dumont (SDumont) apoia cerca de 170 projetos de pesquisa em 18 áreas do conhecimento, liderados por instituições de 12 estados brasileiros. A escola oferece minicursos voltados à programação em computação de alto desempenho, abordando modelos de programação paralela, ferramentas de perfilagem e bibliotecas para algoritmos otimizados.

Desde 2010, o LNCC realiza a "Escola de HPC", inicialmente chamada "Semana Massivamente Paralela". Em 2017, o evento foi renomeado para "Semana Supercomputador SDumont", totalizando 15 edições, sendo sete sob o nome atual. Também foram realizadas três edições de inverno em agosto.

Como participar

Informações

Inscrições

As inscrições nas atividades deste evento estarão abertas de 03 Nov 2025 a 09 Jan 2026. Confira o valor de inscrição para todos os eventos na página de Inscrições. Os membros da instituição e bolsistas do Programa PIBIC/PIBIT do LNCC têm inscrições gratuitas.

Formato das atividades

As atividades serão oferecidas de forma síncrona e online, pela plataforma Zoom, em datas e horários específicos divulgados após a inscrição. Toda a programação deste evento, disponível logo abaixo, será gravada e disponibilizada no canal do YouTube do LNCC.

Certificados

Os dados fornecidos no momento da inscrição serão utilizados para a emissão dos certificados de participação, disponíveis até 31 Mar 2026. O Programa de Verão emite certificados exclusivamente para inscritos que acompanhem as atividades pelo Zoom — participantes via YouTube não recebem certificação.

Atividades

Programação

Acesse a programação completa.

Palestras

Apresentador(es):
Bernd Mohr (Jülich Supercomputing Center)
Horário:
Dia 26/01. De 12:50h a 13:50h
The Forschungszentrum Jülich is a distinguished research institution in Europe, with a substantial workforce of over 7,500 employees. Its Jülich Supercomputing Centre (JSC) provides supercomputer services and support to national and international user communities. JSC is the largest of the three national supercomputing centres in Germany, with a workforce of over 350. As of November 2025, JSC is in the final stages of installing Europe's first Exascale system, called JUPITER. With JUPITER, we are also in the process of setting up the Jülich AI Factory (JAIF), one of the fourteen AI factories in Europe.

The success of JSC in facilitating scientific advancement through high-performance computing and artificial intelligence can be attributed to two fundamental pillars. The development of the Modular Supercomputing Architecture (MSA) was instrumental in the provision of suitable supercomputing services to a broad spectrum of application domains. MSA enables the integration of a diverse range of computing modules, catering to a wide spectrum of user requirements, ranging from computationally intensive, high-performance simulation codes to data-intensive artificial intelligence workflows. Secondly, the multi-tier user support concept provides professional and efficient assistance to the user base. The support structure comprises a user service team that provides fundamental assistance on a 24/7 basis, a high-level High-Performance Computing (HPC) and Artificial Intelligence (AI) support team that offers guidance in the porting or optimisation of applications for HPC and AI, and a Distributed/Data Services Support Team. Each user group is assigned a project mentor, who serves as a permanent and single point-of-contact for the user. If complex or long-term assistance is required, the project mentor can engage Algorithms, Tools and Methods Labs (ATML) for HPC-specific topics, as well as Simulation and Data Labs (SDL) for the purpose of providing domain-specific support to interact with the users to solve their specific problems.

Apresentador(es):
Francieli Zanon Boito (INRIA-Universidade de Bordeaux)
Horário:
Dia 27/01. De 12:50h a 13:50h
In HPC systems, I/O resources are not traditionally arbitrated in the same way as compute resources (nodes, CPUs, etc). However, I/O resources have an important impact on performance, and this impact depends on application characteristics. Moreover, these resources are potentially shared by jobs, which may then suffer with interference from others.

In this talk, I will discuss recent work from the TADaaM team from the Inria Center at the University of Bordeaux towards improving HPC I/O resource usage through better allocation and scheduling algorithms, and on strategies for obtaining the information required by these techniques.

Apresentador(es):
Cláudia Brito (INESC TEC)
Horário:
Dia 28/01. De 12:50h a 13:50h
O crescimento contínuo da escala dos workloads de treino de IA tornou o consumo de energia uma restrição crítica que afeta o desempenho do sistema, os custos operacionais e o desenho da infraestrutura. Este trabalho centra-se na análise do consumo de energia em pipelines de treino de IA e na identificação das limitações das abordagens de otimização existentes, que se focam predominantemente no débito (throughput) ou no tempo total de treino. Neste trabalho, apresentamos uma análise do consumo de energia ao longo de todo o pipeline de treino de IA, evidenciando como as diferentes fases contribuem de forma desigual para o consumo total de energia.

O trabalho aqui apresentado incide em observações preliminares ao nível do sistema e na identificação de oportunidades iniciais de otimização, com particular ênfase no comportamento energético das GPUs. Embora o consumo de energia se distribua por múltiplas camadas da stack, propomos uma solução de otimização centrada na GPU como caso de estudo inicial, demonstrando como um controlo direcionado ao nível do sistema pode conduzir a reduções significativas no consumo energético. Os resultados atuais indicam que a abordagem proposta permite poupanças de energia de até 35%, com impacto negligenciável no tempo de treino. Estes resultados preliminares motivam a exploração futura de estratégias de otimização energética, abrangentes a todo o pipeline, para cargas de trabalho de treino de IA escaláveis.

Apresentador(es):
Rosa Badia (Barcelona Supercomputing Center)
Horário:
Dia 29/01. De 12:50h a 13:50h
With Exaflop systems already here, High-Performance Computing (HPC) involves everytime larger and complex supercomputers. At the same time, the user community is aware of the underlying performance and eager to leverage it by providing more complex application workflows to leverage them. What is more, current application trends aim to use data analytics and artificial intelligence combined with HPC modeling and simulation.
PyCOMPSs is a task-based is a parallel task-based programming in Python. Based on simple annotations, sequential Python programs can be executed in parallel in HPC-clusters and other distributed infrastructures. The talk will present an overview of of PyCOMPSs, as well as an introduction to the dislib, a machine learning library developed on top of PyCOMPSs. The talk will be illustrated with the explanation of some applications developed with PyCOMPSs.

Short bio: Rosa M. Badia holds a PhD in Computer Science (1994) from the Technical University of Catalonia (UPC). She is the director of the HPC software research area and the manager of the Workflows and Distributed Computing research group, both roles at the Barcelona Supercomputing Center (BSC, Spain). Her research has contributed to parallel programming models for multicore and distributed computing. Recent contributions have focused on the digital continuum, proposing new programming environments and software for edge-to-cloud, as well as for the support of hybrid quantum-classic workflows. The research is integrated in PyCOMPSs/COMPSs, a parallel task-based programming distributed computing framework, and its application to developing large heterogeneous workflows that combine HPC, Big Data, and Machine Learning. The group is also doing research around the dislib, a parallel machine learning library parallelized with PyCOMPSs. Dr Badia has published more than 200 papers on her research topics in international conferences and journals. She has been very active in projects funded by the European Commission and in contracts with industry. She was the PI of the EuroHPC project eFlows4HPC. She is a member of the EuroHPC JU RIAG and a member of the HiPEAC Network of Excellence. She received the Euro-Par Achievement Award 2019, the DonaTIC award, category Academia/Researcher in 2019 and the HPDC Achievement Award 2021. Since 2023 she is a member of the Institut d'Estudis Catalans (Catalan academy). She is the chair of the ACM Europe Council since beginning of 2022.

Apresentador(es):
Marcos Mazzini, Alejandro Silva, Lara Kurtz, Nicolás Wolovick (Universidad de Córdoba)
Horário:
Dia 30/01. De 12:50h a 13:50h
In this talk we will develop how Carpinchos HPC team was born and lessons learnt in the way that included IndySCC23, ASC24, IndySCC24 and IndySCC25. We will discuss our plan to develop a CARLA 2026 Cluster Competition in Córdoba.

Short bio:
Marcos Mazzini: Master in CS, Carpinchos ingniter, IndySCC23&ASC24 advisor, former technical staff UNC Supercómputo, currently HPC/AI infrastructure engineer Sesterce.

Alejandro Silva: CS student, technical staff in UNC Supercómputo, IndySCC23,24 & ASC24 contestant, IndySCC25 advisor.

Lara Kurtz: CS student, technical staff in UNC Supercómputo & Clementina XXI, IndySCC23,24,25 & ASC24 contestant. CARLA 2026 Cluster Competition organizer.

Nicolás Wolovick: PhD in CS, director of UNC Supercómputo, full professor CS FAMAF-UNC, CyberCiruja.

Apresentador(es):
Filipe Guimarães - Jülich Supercomputing Centre (JSC)
Horário:
Dia 02/02. De 12:50h a 13:50h
Diagnosing and reporting operational issues on large-scale HPC systems is a complex task that requires efficient monitoring and analysis. At the Jülich Supercomputing Centre (JSC), we address this challenge with LLview (https://llview.fz-juelich.de), an open-source system and job reporting platform that supports both users and operators. LLview provides near real-time metrics and analysis through an intuitive, role-based web interface, helping to optimise resource usage and overall system performance. In this presentation, I will highlight LLview’s key features and showcase real examples where it has helped users and support teams identify issues and improve service efficiency. Designed to scale with next-generation systems, LLview is ready to meet the reporting demands of the exascale era.

Short bio: Dr. Filipe Guimarães é físico computacional, com doutorado concluído em 2011. Ingressou no Forschungszentrum Jülich (FZJ) em 2014 como pesquisador no instituto Peter Grünberg (PGI-1), atuando em física da matéria condensada. Em 2020, passou a integrar o Jülich Supercomputing Centre (JSC), onde é membro da equipe de suporte de usuários, trabalhando para melhorar a usabilidade e a transparência de ambientes de supercomputação em produção, incluindo a preparação de ferramentas e infraestrutura para sistemas em escala exascale, como o JUPITER, o primeiro supercomputador exascale europeu. Filipe é um dos desenvolvedores do LLview, uma infraestrutura open source de relatórios e visualização para sistemas de computação de alta performance (HPC), desenvolvida com forte foco no engajamento dos usuários, em relatórios escaláveis e na análise intuitiva de jobs. Ele também contribui para diversos projetos colaborativos europeus na área de HPC e atua como elo entre usuários, desenvolvedores e operações, com especial interesse em reduzir as barreiras para o uso efetivo de HPC e em viabilizar uma utilização mais sustentável e eficiente de recursos computacionais de grande escala.

Minicursos

Professor(es):
Eduardo Mendes Garcia (LNCC)
Horário:
Dia 26/01. Das 14:00h às 18:00h
Resumo: Este é um minicurso voltado a desenvolver a capacidade de usar o sistema operacional através do terminal de comandos em oposição à clicks do mouse. Inicia-se com conceitos fundamentais da organização do Unix, seguindo para o formato dos comandos, o fluxo de execução e programação modular com funções.

Ementa: Terminal, Arquivos e diretórios, Comandos, Variáveis, Operações. Fluxo de execução, programação modular

Bibliografia:
  1. Classic Shell Scripting, por Arnold Robbins, isbn 978-8577801473
  2. Linux pocket guide daniel j. barret, isbn 978-1449316693
  3. https://www.geeksforgeeks.org/introduction-to-unix-system/

Professor(es):
André Carneiro (LNCC)
Horário:
Dia 26/01. Das 14:00h às 18:00h
Resumo:
Visão geral do Sistema de Arquivos Paralelo Lustre e como está configurado no SDumont, apresentando as melhores práticas na utilização do Lustre e uma visão geral sobre o MPI-IO.

Objetivos:
Este curso contemplará a programação paralela em arquiteturas de computadores de memória distribuída com arquivos paralelos Lustre, com enfoque na área de computação científica. Serão abordados tópicos como conceitos fundamentais de paralelismo de dados, arquiteturas de sistemas de arquivos paralelos, técnicas de otimização e estudo de casos. É também objetivo do curso a aplicação prática em laboratório dos conhecimentos de programação paralela adquiridos pelos alunos.

Ementa:
  • Arquitetura de um Sistema de Arquivos Paralelo Lustre;
  • Funcionamento do Lustre no SDumont;
  • Parâmetros e Utilização do Lustre;
  • Introdução ao MPI-IO;
  • Exemplos

Professor(es):
Roberto Souto, Bruno Fagundes (LNCC)
Horário:
Dia 26/01. Das 08:00h às 12:00h
Resumo:
Visão geral do ambiente computacional do supercomputador Santos Dumont, mostrando os principais aspectos com relação aos recursos de hardware e de software disponíveis aos usuários. Visão geral das ferramentas de avaliação de desempenho disponíveis aos usuários do supercomputador Santos Dumont, mostrando aspectos que visam obter um melhor entendimento da execução da aplicação, obtendo-se perfil de desempenho, que podem orientar no sentido de otimização do código.

Objetivos:
Este curso contemplará a programação paralela heterogênea em arquiteturas de computadores de memória distribuída, com enfoque na área de computação científica. Serão abordados tópicos como conceitos fundamentais de paralelismo, arquiteturas do sistema Santos Dumont, técnicas de otimização e estudo de casos. É também objetivo do curso a aplicação prática em laboratório dos conhecimentos de programação paralela adquiridos pelos alunos.

Ementa:
Configuração dos nós computacionais; arquiteturas paralelas disponíveis (CPU e GPU) sistema operacional Linux RedHat; sistema de gerenciamento de recursos SLURM: principais comandos, submissão e monitoramento de jobs, políticas de submissão no SDUMONT; compiladores, ambientes paralelos de programação distribuída (OpenMPI, Intel MPI), carregando bibliotecas computacionais.

Professor(es):
Sandro Rigo (UNICAMP)
Horário:
Dia 28/01. Das 08:00h às 12:00h
Resumo: In this tutorial we will present the new OpenMP Cluster (OMPC) distributed programming model. The OMPC runtime allows the programmer to annotate their code using OpenMP target offloading directives and run the application in a distributed environment seamlessly using a task-based programming model. OMPC is responsible for scheduling tasks to available nodes, transferring input/output data between nodes, and triggering remote execution all the while handling fault tolerance. The runtime leverages the LLVM infrastructure and is implemented using the well-known MPI library.

Professor(es):
Hiago Mayk Gomes de Araujo Rocha (LNCC)
Horário:
Dia 02/02. Das 08:00h às 12:00h
Resumo: O desempenho de programas pode ser diretamente afetado pelo desbalanceamento de carga em programas paralelos, cache miss e incapacidade dos compiladores de otimizar alguns loops específicos. Para descobrir quais partes do código devem ser modificadas e melhorar o desempenho, ferramentas de Profiling podem ser usadas. Este minicurso explora algumas técnicas, métodos e ferramentas com o objetivo de melhorar o desempenho de códigos em C/C++ sem necessariamente envolver paralelismo. Para tanto, exploraremos por exemplo, otimização de memória cache. Além disso, serão exibidos métodos para identificar trechos de códigos responsáveis gargalos tempo computacional. O minicurso será dado no formato de hands-on, permitindo que os alunos possam executar os experimentos de forma prática.

Ementa:
  1. Uso do profile gprof
  2. Otimização em nível de cache
  3. Otimização de loops e em low level
  4. Profiling em OpemMP/MPI

Professor(es):
Marcelo Pias (FURG)
Horário:
Dia 03/02. Das 08:00h às 12:00h

Professor(es):
Rafaela Brum (UERJ)
Horário:
Dia 27/01. Das 08:00h às 12:00h
Este minicurso é voltado para a apresentação da programação paralela baseada em threads e memória compartilhada através de programas e conceitos da API OpenMP.

Objetivos:
Este curso focará em mostrar ao aluno a ferramenta OpenMP para programação paralela baseada em memória compartilhada, considerando as facilidades de uso e possíveis problemas de sincronização e escopo de dados que surgem com a programação paralela. Além disso, serão apresentados alguns problemas clássicos de paralelismo. Espera-se que ao final do minicurso, o aluno consiga fazer pequenos programas paralelos e com recursos suficientes para continuar os estudos de programação paralela.

Ementa:
  1. Breve histórico e motivação
  2. Diretivas principais
  3. Funções OpenMP
  4. Cláusulas
  5. Sincronização
  6. Exemplos

Professor(es):
Arthur Francisco Lorenzon (UFRGS)
Horário:
Dia 28/01. Das 14:00h às 18:00h

Professor(es):
Murilo do Carmo Boratto (UNEB)
Horário:
Dia 29/01. Das 08:00h às 12:00h
Objetivos: MPI (Message Passing Interface) é uma API padrão para comunicação de dados por meio de mensagens entre processos distribuídos, comumente usada em HPC para criar aplicações que podem ser escalonadas em supercomputadores com múltiplos nós. Como tal, MPI é totalmente compatível com CUDA, que é projetado para computação paralela em um ou mais nós. Existem muitos motivos para querer combinar a programação paralela em MPI e CUDA potencializando os recursos de forma máxima. Um motivo comum é permitir a solução de problemas com um tamanho de dados muito grande para caber na memória de recursos computacionais GPU. Outro motivo é acelerar uma aplicação MPI existente para multi-GPU sobre um único nó existente ou para múltiplos. Com CUDA-AWARE-MPI, esses objetivos podem ser alcançados de forma fácil e eficiente. Neste minicurso, explicarei como funciona a compatibilidade entre MPI e CUDA, e o quão eficiente é e como pode ser usada.

Ementa:
  1. Introdução a escalabilidade de aplicações multi-nós
  2. Multi-GPU Programming
    • P2P
    • NVSHMEM
    • Aproximações Distribuidas e Duplicadas
  3. Práticas em Laboratório
    • Hands-on 1 - Benchmarks Ping Pong
    • Hands-on 2 - Jacobi
    • Hands-on 3 - Modelo Monte Carlos - Aproximação de Pi
  4. Análise Comparativa de Desemplenho entre NCCL x CUDA-AWARE-MPI


Professor(es):
Amanda Sabatini Dufek (National Energy Research Scientific Computing Center)
Horário:
Dia 27/01. Das 14:00h às 18:00h

Professor(es):
Denise Stringhini (UNIFESP)
Horário:
Dia 28/01. Das 08:00h às 12:00h
Resumo: Curso introdutório em linguagem CUDA, uma extensão da linguagem C utilizada para a programação de aplicações de propósito geral, sendo executadas em arquitetura massivamente paralela de placas gráficas, denominadas GPU.

Objetivos: A arquitetura das GPUs (“Graphics Processing Unit”) foi projetada para efetuar os cálculos em ponto flutuante mais frequentemente realizados em aplicações gráficas. Esta é uma arquitetura bem mais especializada que a presente em CPUs (“Central processing unit”) , o que faz com que estes programas rodem mais rapidamente nestas plataformas. Além disso, as GPUs são altamente paralelizadas, já havendo atualmente modelos com milhares de núcleos computacionais (“cores”). Embora originalmente desenvolvida para executar aplicações gráficas com maior eficiência, também é cada vez maior o uso de GPUs em aplicações não-gráficas. São aplicações que envolvem a resolução de métodos de álgebra numérica computacional, frequentemente também utilizados nas aplicações gráficas, obtendo-se um significativo ganho de desempenho. Neste curso será apresentada a arquitetura de placas gráficas NVIDIA e a conexão destas placas com o computador hospedeiro. Em seguida será apresentado a plataforma de programação CUDA, que é uma extensão do C/C++ processada tanto no computador hospedeiro quanto nas placas gráficas conectadas a este. Serão apresentados exemplos de códigos de cada um dos tópicos abordados, os quais os alunos poderão executá-los nas máquinas disponíveis em sala de aula.

Professor(es):
Arthur Francisco Lorenzon (UFRGS)
Horário:
Dia 29/01. Das 08:00h às 12:00h

Professor(es):
Pedro Pais Lopes (Exaflop)
Horário:
Dia 28/01. Das 14:00h às 18:00h
Objetivos: Este curso contemplará a programação paralela heterogênea através de diretivas de compilação no padrão OpenMP e OpenACC, com suporte a dispositivos de processamento massivo, como GPUs e CPUs com centenas de núcleos, e com enfoque na área de computação científica. Serão abordados os conceitos dos padrões, versões que suportam o processamento nestes dispositivos, modelos de memória e execução, comparação com outras formas de programação, compiladores suportados e exemplos práticos.

Material: https://drive.google.com/file/d/1Yu9dUkhEj7qHhAjVTCoocPiNiJ5o2LYx/view?usp=sharing
Slides: https://docs.google.com/presentation/d/1agBAnqJv_BLP_Amgv6h06NdM_a-38dd5/edit?usp=sharing&ouid=109705978110428452490&rtpof=true&sd=true

Ementa:
  1. Breve introdução à computação paralela massiva
  2. Introdução ao conceito de programação por diretivas de compilação
  3. Padrão OpenMP, OpenACC e quadro comparativo
  4. Evolução do padrão e versionamento
  5. Principais diretivas
  6. Comparação com outras formas de programação paralela massiva
  7. Compiladores com suporte aos padrões
  8. Exemplos práticos
  9. Estudo de caso


Bibliografia:
  1. https://www.openmp.org/specifications/ OpenMP 5.1 Specification
  2. R.v.d. Pas et. al., Using OpenMP - The next Step;, MIT Press, Oct. 2017, ISBN: 9780262534789
  3. Jose Monsalve Diaz et. al, "Is OpenMP 4.5 Target Off-load Ready for the Real World;, https://openmpcon.org/wp-content/uploads/2018_Session1_Diaz.pdf
  4. NASA Advanced Supercomputing Division, “Using OpenMP 4.5 Target Offload for Programming Heterogeneous Systems”, https://www.nas.nasa.gov/hecc/assets/pdf/training/OpenMP4.5_3-20-19.pdf
  5. https://www.openacc.org/sites/default/files/inline-files/OpenACC_3.4.pdf

Professor(es):
Pedro Henrique di Francia Rosso (UNICAMP)
Horário:
Dia 27/01. Das 08:00h às 12:00h
Resumo: O objetivo deste curso é apresentar os conceitos básicos de programação para FPGAs e como aplicá-los em sistemas distribuídos. FPGAs são aceleradores que possuem circuitos integrados compostos de blocos lógicos, blocos de entrada e saída, registros, memórias e chaves seletores para interconexões que definem conexões entre os blocos lógicos e de entrada e saída. O código-fonte dos programas utilizados no curso e todo o material estão disponíveis no repositório https://gitlab.com/ompcluster/conferences/sdumont-24. Neste curso, daremos foco ao ambiente de FPGAs da AMD (Xilinx), abordaremos de forma introdutória os conceitos sobre como desenvolver e executar kernels em FPGAs conforme a documentação oficial (HLS e XRT), e também conceitos de execução de aplicações aceleradas por FPGA em sistemas distribuídos. Também apresentaremos de forma introdutória opções de execução de aplicações aceleradas por FPGAs usando OpenMP, através do modelo de programação OpenMP Cluster (OMPC), mostraremos uma forma alternativa e mais simples de acelerar aplicações em sistemas distribuídos usando FPGAs. Assumimos que o usuário possui compreensão geral sobre programação com a linguagem C/C++ e em sistemas distribuídos (Message Passing Interface - MPI). Durante o curso, serão apresentados exemplos em linguagem C, possivelmente com alguns exercícios sendo propostos aos participantes.

Ementa:
  1. Introdução
  2. Conceitos gerais sobre FPGAs
  3. Desenvolvimento de kernels para FPGAs
  4. High-Level Synthesis (HLS)
  5. Controlando aplicações aceleradas por FPGAs
  6. Aplicação de soma de vetores acelerada por FPGAs.
  7. Aplicação de soma de vetores acelerada por FPGAs distribuída.
  8. Conceitos básicos sobre MPI
  9. Conceitos básicos sobre OpenMP
  10. OpenMP Cluster (OMPC)
  11. OMPC para FPGAs
  12. Aplicação de soma de vetores acelerada por FPGAs usando OMPC.
  13. Aplicação de soma de vetores acelerada por FPGAs usando OMPC distribuída.
  14. Aplicação de multiplicação de matrizes usando FPGAs.


Bibliografia:
  1. XRT: https://www.xilinx.com/products/design-tools/vitis/xrt.html
  2. HLS: https://docs.xilinx.com/r/en-US/ug1399-vitis-hls
  3. AMD Tutorials: https://docs.xilinx.com/r/en-US/Vitis-Tutorials-Getting-Started/Vitis-HLS
  4. OMPC: YVIQUEL, Hervé et al. The OpenMP Cluster Programming Model. In: Workshop Proceedings of the 51st International Conference on Parallel Processing. 2022. p. 1-11.

Professor(es):
Gabriel Silva (UFRJ)
Horário:
Dia 29/01. Das 14:00h às 18:00h
A programação híbrida utilizando MPI+OpenMP com diretivas de descarga (offloading) para aceleradores é uma abordagem eficiente para explorar paralelismo em clusters com múltiplos nós com aceleradores (como GPUs). O MPI é utilizado para comunicação entre os nós do cluster e OpenMP utilizado para distribuir a carga de trabalho em cada nó entre os seus diversos processadores (núcleos) e os aceleradores, normalmente GPUs. Com essa abordagem conseguimos realizar a paralelização da aplicação, com a descarga de tarefas mais intensivas para GPUs, além de aproveitar os núcleos de processador existentes em cada nó, conseguindo a maximização do desempenho da aplicação, Em nosso curso abordaremos os seguintes tópicos:
  1. Conceitos básicos de programação com MPI e OpenMP
  2. Estrutura básica de comunicação entre hospedeiro e GPU
  3. Apresentação dos diferentes níveis de suporte a threads do MPI e suas implicações para programação híbrida: único, afunilado, serializado e múltiplo.
  4. Suporte dos compiladores para OpenMP offloading
  5. Movimentação de dados entre o hospedeiro e dispositivo
  6. Diretivas OpenMP para offloading: target, cláusula map, target data, target teams, target teams distribute
  7. Exemplos de programação híbrida MPI e OpenMP


Professor(es):
André Carneiro (LNCC)
Horário:
Dia 04/02. Das 08:00h às 12:00h
Resumo: Na Computação de Alto Desempenho (High-Performance Computing), as operações de entrada e saída (I/O) são um gargalo para um número crescente de aplicações, podendo comprometer a escalabilidade. Em ambientes de larga escala, como clusters e supercomputadores, o uso de bibliotecas de alto-nível como MPI-IO permite obter melhor desempenho através de I/O paralelo e de operações coletivas. Estas possibilitam o uso transparente de técnicas de otimização como data sieving e two-phase I/O. Nesse contexto, este minicurso objetiva introduzir conceitos de I/ O paralelo e MPI-IO, com um enfoque prático, de forma que os participantes aprendam a utilizar a biblioteca em suas aplicações.

Material: https://drive.google.com/file/d/1zqi0E06aO36G6jWhG-o0G0nwuS5mknEN/view?usp=sharing
Pré-requisitos: Conhecimentos básicos sobre conceitos MPI
  1. Processos, ranks
  2. Comunicadores
  3. Operações bloqueantes e não bloqueantes (troca de mensagem)
  4. Operações individuais e coletivas (troca de mensagem)
  5. MPI datatypes

Professor(es):
Gabriel Silva (UFRJ)
Horário:
Dia 27/01. Das 14:00h às 18:00h
Resumo: O objetivo deste curso é apresentar aos programadores que não estão familiarizados com programação paralela as noções básicas para desenvolver e executar programas paralelos com o paradigma de troca de mensagens, utilizando as bibliotecas de comunicação do padrão MPI. O MPI é um padrão, implantado há mais de 25 anos, que vem sendo amplamente utilizado para o desenvolvimento de programas paralelos científicos em arquitetura de sistemas distribuídos, tais como clusters de alto desempenho, com milhares de processadores. O código fonte dos programas utilizados no curso, e as instruções para a instalação do ambiente de execução MPI, estão disponíveis em https://github.com/gpsilva2003/MPI. Utilizamos a documentação de referência do próprio padrão MPI e as referências listadas na seção bibliográfica para a elaboração do curso. O curso inicia fornecendo informações sobre o ambiente de sistemas distribuídos e sobre a programação de troca de mensagens. A seguir apresentamos as rotinas básicas da norma MPI, incluindo as rotinas de gerenciamento de ambiente, de comunicação ponto a ponto, as rotinas de comunicações coletivas, e detalhes sobre os diversos modos de envio e recepção das mensagens. Durante o curso, serão apresentados exemplos em linguagem C, com alguns exercícios sendo propostos aos participantes. Assumimos que o usuário possui compreensão gerais sobre programação com a linguagem C.

Ementa:
  1. Introdução
    • Características de MPI
    • Histórico de MPI
    • Plataformas de Hardware
    • Exemplo de aplicações paralelas
    • Avaliação de desempenho - Conceitos básicos
  2. O padrão MPI.
    • Exemplo de um programa MPI
    • Rotinas básicas de gerenciamento.
    • Rotinas básicas de comunicação ponto a ponto
    • Correspondência entre os tipos MPI e C
    • Identificando o tamanho e as informações da mensagem recebida
    • Estudo de caso: método do trapézio
  3. Rotinas de Comunicação Coletivas
    • Barreira: MPI_Barrier()
    • Difusão: MPI_Broadcast()
    • Coleta: MPI_Gather()
    • Redução: MPI_Reduce()
    • Redução com difusão: MPI_Allreduce()
    • Coleta com difusão: MPI_Allgather()
    • Estudo de caso: multiplicação de matriz
  4. Comunicação MPI em detalhes
    • Rotinas de envio e recepção bloqueantes x não-bloqueantes
    • Modos de comunicação: síncrono, pronto, bufferizado e padrão
    • Evitando o impasse (deadlock)
    • Considerações de desempenho
    • Estudo de caso: número primos


Bibliografia:
  1. https://www.mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf
  2. Gabriel Silva, Programação Paralela com MPI: Um Curso Introdutório, Amazon Serviços de varejo do Brasil, 2018.
  3. Peter Pacheco. Parallel Programming with MPI . Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2019.
  4. Wesley Kendall, 2013, beginning MPI( An Introduction in C) .

Professor(es):
Silvana Rosetto (UFRJ)
Horário:
Dia 04/02. Das 08:00h às 12:00h
Aplicações de larga escala como simulações, treinamento de inteligência artificial, computação cientı́fica e outras requerem grande poder computacional. Aglomerados de computadores e aceleradores são utilizados como solução para a demanda de computação existente, porém, seu uso depende do consumo de grande quantidade de energia, tanto para manter a infraestrutura computacional requerida, como para executar as aplicações que dependem dessa infraestrutura. A computação sustentável — ou computação verde — preocupa-se com os impactos ambientais trazidos pela computação e volta-se para o estudo de técnicas e novas práticas que permitam mitigar esses impactos. Neste minicurso, apresentaremos uma breve visão histórica sobre o conceito e a prática de computação sustentável e suas motivações, seus elementos e abrangência, técnicas, ferramentas e métricas associadas, e de que forma, em particular, ela vem sendo inserida no contexto de computação de alto desempenho.

Objetivos:
  1. Introduzir os conceitos relacionados à computação sustentável, sua motivação, abrangência e breve histórico.
  2. Apresentar técnicas e métricas que vem sendo utilizadas para reduzir e medir o consumo de energia e o impacto ambiental na execução de aplicações computacionais, em particular no contexto de computação de alto desempenho.
  3. Introduzir o uso de ferramenta(s) que permite medir o consumo de recursos utilizados por uma aplicação computacional, incluindo o consumo de energia.
  4. Mostrar exemplos práticos de uso das técnicas, métricas e ferramentas apresentadas.
  5. Conscientizar estudantes e profissionais de computação da necessidade e relevância de construir soluções computacionais que vizem a minimização do consumo de energia e do seu impacto socio-ambiental.


Ementa
  1. Computação sustentável: motivações, histórico, objetivos, relevância atual e abrangência.
  2. Técnicas de modelagem e desenvolvimento de software para reduzir o consumo de energia e impacto ambiental em aplicações computacionais.
  3. Ferramentas para monitoramento e coleta de métricas de eficiência energética.
  4. Exemplos de uso das ferramentas apresentadas no contexto de computação sustentável.

Professor(es):
Diego Carvalho (CEFET-RJ)
Horário:
Dia 02/02. Das 14:00h às 18:00h
Resumo: Python é uma linguagem de programação de alto nível para programação de propósito geral lançada ao público em 1991. Possui contruções que permitem a criação de programas de pequena à grande escala e possui uma filosofia de design que prioriza principalmente a legibilidade de código. É cada vez mais usada em computação científica e numérica. Python tem tipagem dinâmica e gerência automática de memória. Suporta múltiplos paradigmas de programação, como programação orientada à objetos, imperativa, funcional e procedural. É citado frequentemente como uma de suas melhores características sua grande e abrangente biblioteca padrão. O Python Package Index, o repositório oficial de pacotes de terceiros, possui outros 130000 pacotes. Interpretadores da linguagem Python estão disponíveis para diversos sistemas operacionais. A implmentação de referência, a CPython, é open source e possui um modelo de desenvolvimento comunitário assim como a maior parte das outras implementações alternativas.

Pré-requisitos
  1. Conhecimentos básicos de programação estruturada
  2. Conhecimentos básicos de programação orientada à objetos
  3. Conhecimentos básicos do uso do shell bash ou similar no ambiente GNU/Linux


Ementa:
  1. Introdução geral à HPC
  2. Processamento em memória compartilhada
    • Threads vs processos
    • Módulo threading vs módulo multiprocessing
  3. Módulo multiprocessing
    • Exemplo: aproximação de pi com Monte Carlo
  4. Processamento em memória distribuída
    • Introdução à MPI
    • Módulo mpi4pi
    • Módulo mpi4pi + módulo numpy
    • Exemplo: reimplementação da aproximação de pi com MPI
  5. Biblioteca Parsl

Professor(es):
André Carneiro, Bruno Fagundes (LNCC)
Horário:
Dia 06/02. Das 14:00h às 18:00h
Requisitos: The minimum requirements to deploy the hands-on lab enviroment are: VirtualBox 6.1, Dual-Core processor with virtualization support 4 GB RAM, 7 GB storage space

Ementa:
  1. HPC Clusters overview: Types of clusters, Basic architecture of an HPC cluster
  2. Infrastructure components: Resource management, Time sincronism, Image repository, Shared file system, User account management, Passwordless authentication, Environment modules, High performance network
  3. Hands-on lab environment: Infrastructure, Infrastructure tools
  4. Clustershell
  5. Environment Modules
  6. SLURM
  7. Architecture
  8. Daemons
  9. Configuration Files: Partitions, Nodes, Scheduling policies, Administrative commands, Environment deployment
  10. Munge
  11. MySQL/MariaDB
  12. Daemons
  13. Slurm configuration
  14. Testing
  15. Access control and Accounting: Accounting hierarchy, Implementing access control, Creating, modifying, and removing associations, Restricting resource access
  16. Administrative activities: Modifying jobs’ priorities, Nodes management, Resource reservation, Partition management, Accounting report

Professor(es):
André Carneiro, Bruno Fagundes (LNCC)
Horário:
Dia 06/02. Das 08:00h às 12:00h
Requisitos: The minimum requirements to deploy the hands-on lab enviroment are: VirtualBox 6.1, Dual-Core processor with virtualization support 4 GB RAM, 7 GB storage space

Ementa:
  1. HPC Clusters overview: Types of clusters, Basic architecture of an HPC cluster
  2. Infrastructure components: Resource management, Time sincronism, Image repository, Shared file system, User account management, Passwordless authentication, Environment modules, High performance network
  3. Hands-on lab environment: Infrastructure, Infrastructure tools
  4. Clustershell
  5. Environment Modules
  6. SLURM
  7. Architecture
  8. Daemons
  9. Configuration Files: Partitions, Nodes, Scheduling policies, Administrative commands, Environment deployment
  10. Munge
  11. MySQL/MariaDB
  12. Daemons
  13. Slurm configuration
  14. Testing
  15. Access control and Accounting: Accounting hierarchy, Implementing access control, Creating, modifying, and removing associations, Restricting resource access
  16. Administrative activities: Modifying jobs’ priorities, Nodes management, Resource reservation, Partition management, Accounting report

Professor(es):
Pedro Mário da Cruz e Silva
Horário:
Dia 03/02. Das 14:00h às 18:00h

Professor(es):
Pedro Mário da Cruz e Silva
Horário:
Dia 04/02. Das 14:00h às 18:00h

Professor(es):
Pedro Mário da Cruz e Silva (NVIDIA)
Horário:
Dia 03/02. Das 08:00h às 12:00h

Professor(es):
Gleydson Jesus (Eviden)
Horário:
Dia 02/02. Das 14:00h às 18:00h

Professor(es):
Gleydson Jesus (Eviden)
Horário:
Dia 02/02. Das 08:00h às 12:00h

Professor(es):
Lucas Santos (EVIDEN), Bruno Fagundes, André Carneiro, Rafael Soares (LNCC)
Horário:
Dia 05/02. Das 08:00h às 12:00h e das 14:00h às 18:00h
Apresentação de arquitetura do Cluster:
  1. XH3000
  2. Rede e conectividade
  3. Tipos de compute nodes ( Detalhamento de arquitetura e performance)
  4. TIYA ( H100 )
  5. NEBA ( GH200 )
  6. MATO
  7. MANA
  8. GRACE
Apresentação da solução de Software para os usuários
  1. Softwares e bibliotecas disponiveis
  2. Singularity
  3. Detalhar criação de container e BYOE

Bootcamps

Horário:
Dia 30/01. Das 08:00h às 18:00h
O bootcamp de Programação Paralela Aplicada é uma oportunidade excepcional para quem deseja dominar as técnicas de programação paralela e computação de alto desempenho e aplicá-las a desafios reais. Com foco em paralelização e otimização de código para multicore e manycore, além de uso de modelos de programação em supercomputação, este bootcamp oferece uma abordagem prática e orientada a resultados. Guiado por mentores experientes, o bootcamp tem como objetivo capacitar os participantes a enfrentar problemas computacionais complexos, impulsionando inovação e eficiência em suas áreas de atuação.

Programa:
  • 1. Introdução a Modelos de Programação Paralela
  • 2. Multicores e OpenMP
  • 3. Medidas de escalabilidade
  • 4. Demonstrações e Experimentações
  • 5. MPI e Comunicação
  • 6. Demonstrações e Experimentações
  • 7. Manycores e GPGPUs/
  • 8. Medidas de desempenho
  • 9. Demonstrações e Experimentações