Burocracias¶
Horários
Aulas:
Segunda -> 16h30 -- 18h30
Sexta -> 14h15 -- 16h15
Atendimento:
Segunda -> 18h30 -- 20h00
Objetivos de Aprendizagem
Ao final da disciplina, o estudante será capaz de:
Obj 1. Desenvolver algoritmos usando recursos de computação paralela e distribuída para obter ganhos de desempenho na aplicação final.
Obj 2. Aplicar estruturas lógicas de computação distribuída no desenvolvimento de algoritmos multitarefa.
Obj 3. Usar GPGPU (General-Purpose computing on Graphics Processing Units) para computação numérica e comparar seu desempenho com soluções baseadas em CPU.
Obj 4. Planejar e projetar sistemas de computação de alto desempenho, considerando aspectos de hardware, escalabilidade, e alocação de recursos.
Obj 5. Analisar a complexidade de algoritmos paralelos e a eficiência de implementações específicas, identificando as métricas de desempenho mais adequadas para essa análise.
Obj 6. Aplicar recursos específicos de sistemas operacionais (como escalonadores, controle de threads e gerenciamento de memória) para melhorar o desempenho de algoritmos.
Obj 7. Desenvolver aplicações que utilizam protocolos otimizados para paralelização, como MPI, OpenMP e CUDA.
Plano de Aulas - Supercomputação (2025.2)
Data | Aula | Tópicos Abordados | Atividades |
---|---|---|---|
11/ago (seg) | Aula 01 | Problemas de HPC; mapa de memória; Python × C++; desempenho; objetivos da disciplina | Transcrição de códigos Python para C++; comparação de desempenho entre linguagens. Entrega até quinta-feira, 23h59. |
15/ago (sex) | Aula 02 | Sistemas de HPC; rede, hardware, filas, jobs; SLURM; clusters no Brasil e no mundo | Testes com SLURM no Cluster Franky; comparação de desempenho em diferentes filas. Entrega segunda, até 08h30. |
18/ago (seg) | Aula 03 | Diagnóstico de código; profiling; discussão de soluções anteriores; introdução ao Projeto 1 | Aplicar profiling; relatório com gargalos, hipóteses de melhoria e comparação de desempenho. Entrega até quinta-feira, 23h59. |
22/ago (sex) | Aula 04 | Aleatoriedade, heurísticas, manipulação de matrizes, alocação de memória | Suporte ao Projeto 1: ajustes em heurísticas, estrutura de dados e uso da memória de forma eficiente. |
25/ago (seg) | Aula 05 | Paralelismo em CPU; threads; cores; OpenMP; variáveis privadas e compartilhadas; scheduling | Suporte ao Projeto 1: paralelismo com OpenMP; compartilhamento entre threads; efeitos do scheduler. |
29/ago (sex) | Aula 06 | Efeitos colaterais do paralelismo; racing conditions; dependências; recursão | Aplicação no projeto: mapear problemas, levantar hipóteses de otimização e comparar desempenho. |
02/set (seg) | Aula 07 | Memória distribuída; comunicação com MPI; ponto-a-ponto e coletiva; grupos e comunicadores | Suporte ao Projeto 1: consolidação do conteúdo com exemplos práticos usando MPI. |
05/set (sex) | Aula 08 | Estratégias híbridas MPI + OpenMP | Discussão de implementações paralelas no projeto; exemplos práticos. |
08/set (seg) | Aula 09 | Aula estúdio | Suporte ao Projeto 1. |
12/set (sex) | Aula 10 | Palestra NVIDIA - CUDA | Palestra NVIDIA - CUDA |
15/set (seg) | Aula 11 | Aula estúdio | Finalização do Projeto 1. Entrega final até 23h59. |
19/set (sex) | Aula 12 | Devolutiva do Projeto 1 | Discussão das soluções apresentadas e feedback. |
22/set (seg) | Aula 13 | Aula estúdio | Últimos ajustes no Projeto 1. Deadline final até 23h59. |
25/set–03/out | — | Provas intermediárias | Avaliação dos conteúdos até MPI. |
06/out (seg) | Aula 14 | Profiling em GPU; warps e SIMD; divergência; alocação de memória | Estudo de caso aplicado; Apresentação do Projeto Extra. |
10/out (sex) | Aula 15 | Histogramming; data race em GPU; atomic; throughput | Estudo de caso aplicado. |
13/out (seg) | Aula 16 | Técnicas stencil; convolução; tile boundaries; agendamento de threads | Estudo de caso aplicado. |
15/out (sex) | Aula 17 | Estabilidade numérica; ponto flutuante; controle de erro | Estudo de caso aplicado. |
24/out (seg) | Aula 18 | Estratégias híbridas com MPI + CUDA; gerenciamento de dados | Estudo de caso aplicado. |
27/out (sex) | Aula 19 | Apresentação do Projeto 2; conversa com pesquisador Glauco Endrico Moura de Lima | Conversa com pesquisador. |
31/out (seg) | Aula 20 | Aula estúdio | Aula estúdio |
03/nov (sex) | Aula 21 | Palestra NVIDIA – OpenACC | Introdução ao OpenACC. |
07/nov (seg) | Aula 22 | Aula estúdio Projeto Final | Aula estúdio - Projeto Final |
10/nov (sex) | Aula 23 | Simulado da prova final | Revisão prática. |
14/nov (seg) | Aula 24 | Encerramento da disciplina. | Entrega final do Projeto até 23h59. |
Atividades (Individual) 5%
Atividade | Objetivos Atendidos | Descrição | Pontos |
---|---|---|---|
Transcrever códigos Python para C++ e comparar desempenho | Obj 1, Obj 3, Obj 5 | Desenvolvem algoritmos em diferentes linguagens e analisam desempenho, reforçando noções de eficiência e impacto da linguagem. | 1 |
Primeiros pedidos de submissão com SLURM + testes em diferentes filas/hardwares | Obj 4, Obj 6 | Planejamento da execução em HPC, usando recursos do SO e observando como configurações de hardware influenciam o desempenho. | 2 |
Profiling + relatório com diagnóstico, hipótese, implementação e análise de desempenho | Obj 1, Obj 4, Obj 5 | Envolve identificar gargalos, propor e testar melhorias, com análise do desempenho final | 2 |
Projeto 1 (Individual) 15%
Mineração de criptomoedas¶
Critérios de Avaliação¶
Rubrica D
-
Executa o código minerador síncrono, no cluster Franky
-
Com dificuldade 5 zeros, com pelo menos 5 gerações diferentes de
sync_gen
-
Gera relatório com explicação, tempo de execução e recursos SLURM utilizados
Rubrica D+
- Mesmos critérios da D, mas com dificuldade 7 zeros
Rubrica C
-
Executa o código minerador assíncrono, no cluster SDumont
-
Com dificuldade 5 zeros, com pelo menos 5 gerações diferentes de
async_gen
-
Gera relatório com explicação, tempos de execução e recursos SLURM utilizados
Rubrica B
-
Executa o código minerador assíncrono, no cluster SDumont
-
Com dificuldade 6 zeros, com pelo menos 5 gerações diferentes de
async_gen
-
Usa pelo menos uma estratégia de otimização em CPU (MPI ou OpenMP)
-
Relatório completo com análise de desempenho, explicação das diferenças entre ambientes
Rubrica B+
- Mesmos critérios da B, mas usando as duas estratégias de otimização: MPI e OpenMP
Rubrica A
-
Executa o código minerador assíncrono, no cluster SDumont
-
Com dificuldade 7 zeros, com pelo menos 5 gerações diferentes de
async_gen
-
Realiza mineração em GPU
-
Relatório com análise detalhada dos ambientes, desempenho e configuração
Rubrica A+
-
Como a A, mas com estratégia híbrida: partes do código em CPU, partes em GPU
-
Apresenta análise comparativa entre as estratégias, ambientes e arquiteturas
Objetivos de Aprendizagem Relacionados¶
Objetivo | Descrição | Relação com o Objetivo de Aprendizagem |
---|---|---|
Obj 1 | Desenvolver algoritmos usando computação paralela/distribuída para ganhos de desempenho | Rúbrica B e B+ |
Obj 2 | Aplicar estrutura lógica de computação distribuída para desenvolvimento de algoritmos multitarefas | Rúbrica B+ e A+ |
Obj 3 | Usar GPGPU para computação numérica e comparar com soluções baseadas em CPU | Rúbrica A e A+. |
Obj 4 | Planejar e projetar sistemas de computação de alto desempenho | Rúbricas D, C, B e A |
Obj 5 | Analisar a complexidade de algoritmos paralelos e a eficiência de uma implementação | Rúbricas B e A |
Obj 6 | Aplicar recursos específicos de sistemas operacionais para otimizar desempenho | Rúbricas C, B e A |
Obj 7 | Desenvolver aplicações com protocolos otimizados para paralelização | Rúbricas B e A |
Projeto 2 (grupo) 25%
Parceria com o Laboratório de Biofísica Molecular e Biologia Estrutural da UFABC¶
Aplicação: Reclassificação de poses de docking proteína-ligante utilizando Graph Neural Networks com mapa de contato proteína-ligante.
Contexto¶
O processo de drug discovery envolve diversas etapas, entre elas o docking proteína-ligante, que é computacionalmente intensivo devido à necessidade de avaliar milhares de conformações possíveis e calcular interações intermoleculares complexas. Softwares tradicionais de docking têm limitações em prever afinidades com precisão. A reclassificação com GNNs oferece uma abordagem complementar, baseada em aprendizado profundo.
Complexidade Computacional¶
- Espaço tridimensional e conformacional: milhões de combinações entre poses e proteínas.
- Modelagem de interações: cálculo de forças como Van der Waals, hidrogênio, hidrofóbicas, etc.
- Avaliação de múltiplas poses: necessidade de pontuar e ranquear resultados.
- Volume de dados: alta demanda computacional e paralelização.
Benefícios da Computação de Alto Desempenho (HPC)¶
A aplicação de HPC é essencial para viabilizar esse tipo de análise em escala:
- Paralelização: clusters e supercomputadores permitem a execução simultânea de milhares de docking runs, distribuindo tarefas entre múltiplas CPUs ou GPUs.
- Aceleração com GPU: redes neurais aplicadas à reclassificação de poses (ex: GNNs com mapas de contato proteína-ligante) se beneficiam diretamente de arquiteturas paralelas como CUDA.
- Distribuição e paralelização: algoritmos que fazem varreduras sobre múltiplos ligantes ou simulações moleculares em réplicas independentes podem ser implementados com paralelismo híbrido (CPU+GPU), distribuindo o processamento por nós computacionais distintos.
Rúbrica de Avaliação¶
Nível | Critérios Técnicos | Desempenho Esperado |
---|---|---|
Rúbrica C | Parte do algoritmo implementada na GPU; sem alteração no número de pontos | Código roda em GPU. |
Rúbrica B | Otimizações efetivas; processa ao menos 2× os pontos do grafo original | Algoritmo reestruturado com ganho perceptível. |
Rúbrica A | Uso de múltiplas GPUs; várias rotinas paralelizadas; >2× pontos do grafo original | Execução distribuída e eficiente com bom uso de recursos paralelos. |
Entrega¶
Código-fonte funcional, comentado e documentado. Relatório técnico com:
- Diagnóstico dos gargalos;
- Proposta de otimização;
- Hipótese de melhoria;
- Implementação da hipótese;
- Comparação de desempenho;
- Discussão dos resultados.
Bônus por Qualidade¶
Conceito Base | Com Bônus |
---|---|
C | C+ |
B | B+ |
A | A+ |
Objetivos de Aprendizagem Relacionados¶
Objetivo | Descrição | Relação com o Projeto |
---|---|---|
Obj 1 | Desenvolver algoritmos com paralelismo/distribuição para ganhos de desempenho | Implementação em GPU ou GPU+CPU |
Obj 2 | Aplicar estruturas lógicas de computação distribuída | Possibilidade de usar MPI-CUDA |
Obj 3 | Usar GPGPU e comparar com CPU | Relatório com comparação quantitativa |
Obj 4 | Planejar e projetar sistemas HPC | Uso de SLURM, estratégias de execução e compilação |
Obj 5 | Analisar complexidade e eficiência | Análise de desempenho e escalabilidade |
Obj 6 | Usar recursos do sistema operacional para otimização | Gerenciamento de GPU, blocos, threads, etc. |
Obj 7 | Desenvolver aplicações com protocolos otimizados para paralelização | Uso de CUDA e, opcionalmente, MPI para multi-GPU |
Projeto Extra (Individual) 5%
Projeto Extra - Extensão do Projeto 1¶
Somente para quem entregou até a Rúbrica B do Projeto 1 dentro do prazo.
Passar o Projeto 1 para GPU e relatar diferenças de desempenho e otimização.
Rubrica A
-
Código minerador assíncrono, cluster SDumont
-
Dificuldade 8 zeros, com pelo menos 5 gerações
async_gen
-
Estratégia híbrida CPU + GPU
-
Relatório completo comparando entre Projeto 1 e Projeto Extra
Rubrica A+
-
Mesmos critérios da A
-
Estratégia distribuída com múltiplas GPUs
-
Relatório completo comparando entre Projeto 1 e Projeto Extra
Objetivo | Descrição | Relação com o Objetivo de Aprendizagem |
---|---|---|
Obj 1 | Desenvolver algoritmos usando computação paralela/distribuída | Projeto deve ser resolvido em GPU, podendo ser híbrido CPU-GPU ou Multi GPU |
Obj 2 | Aplicar lógica de computação distribuída | Rúbrica A+ |
Obj 3 | Usar GPGPU e comparar com CPU | Comparação entre o projeto 1 desenvolvido em CPU e a implementação em GPU |
Obj 4 | Planejar execução em ambiente HPC | Alocação via SLURM, flags de compilação, estratégias para GPU |
Obj 5 | Analisar a eficiência de uma implementação paralela | Diagnóstico, otimizações e comparação de desempenho no relatório |
Obj 6 | Usar recursos do sistema operacional para desempenho | Uso de SLURM, memória GPU, controle de blocos e threads |
Obj 7 | Desenvolver aplicações com protocolos otimizados para paralelização | Implementação de otimizações em GPU ou MultiGPU |