Skip to content

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; passagem de argumentos; recursos de C++ Transcrição de códigos Python para C++; comparação de desempenho entre linguagens.
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.
18/ago (seg) Aula 03 Hierarquia de memória (L1, L2, L3); técnica de Tiling (fateamento em blocos); princípios de localidade espacial e temporal Aplicar tiling para melhorar o uso de cache; reorganizar estruturas de dados para melhor localidade.
22/ago (sex) Aula 04 Aleatoriedade, heurísticas, alocação de memória 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 Paralelismo com OpenMP; compartilhamento entre threads; efeitos do scheduler.
29/ago (sex) Aula 06 Efeitos colaterais do paralelismo; racing conditions; dependências; recursão Estudo de caso: mapear problemas, levantar hipóteses de otimização e comparar desempenho.
01/set (seg) Aula 07 Memória distribuída; comunicação com MPI; ponto-a-ponto e coletiva; grupos e comunicadores Paralelismo com MPI; comunicação entre nós.
05/set (sex) Aula 08 Estratégias híbridas MPI + OpenMP Estudo de caso com MPI + OpenMP, levantamento de gargalos e possíveis otimizações.
08/set (seg) Aula 09 Aula estúdio Suporte ao Projeto 1 – Mineração de criptomoedas em CPU
12/set (sex) Aula 10 Palestra NVIDIA - CUDA Palestra NVIDIA - CUDA
15/set (seg) Aula 11 Aula estúdio Suporte ao Projeto 1 – Mineração de criptomoedas em CPU
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 Ajustes finais no Projeto 1 – Mineração de criptomoedas em CPU
26/set (sex) Aula 14 Prova Intermediária Avaliação dos conteúdos até Estratégias híbridas MPI + OpenMP.
29/set (seg) Aula 15 Profiling em GPU; warps e SIMD; divergência; alocação de memória Atividade prática de Profiling em GPU, análise de divergências e uso de memória.
06/out (seg) Aula 16 Histogramming; data race em GPU; atomic; throughput Estudo de caso aplicado.
10/out (sex) Aula 17 Técnicas stencil; convolução; tile boundaries; agendamento de threads Estudo de caso aplicado.
13/out (seg) Aula 18 Estabilidade numérica; ponto flutuante; controle de erro Estudo de caso aplicado.
17/out (sex) Aula 19 Estratégias híbridas com MPI + CUDA; gerenciamento de dados Atividade prática com múltiplas GPUs.
20/out (seg) Aula 20 Resumo das estratégias de otimização; discussão sobre aplicação em projeto Discussão coletiva de estratégias de otimização.
24/out (sex) Aula 21 Apresentação do Projeto 2 Discussão sobre estratégias de otimização para aplicação no projeto.
27/out (seg) Aula 22 Aula estúdio Suporte ao Projeto 2 – Mineração de criptomoedas em GPU
31/out (sex) Aula 23 Palestra NVIDIA – OpenACC Introdução ao OpenACC
03/nov (seg) Aula 24 Aula estúdio Suporte ao Projeto 2 – Mineração de criptomoedas em GPU
07/nov (sex) Aula 25 Aula estúdio Suporte ao Projeto 2 – Mineração de criptomoedas em GPU
10/nov (seg) Aula 26 Devolutiva do Projeto 2 Ajustes finais após feedback ao Projeto 2
14/nov (sex) Aula 27 Simulado da Avaliação Final Revisão prática.
17/nov (seg) Aula 28 Avaliação Final Avaliação Final
24/nov (seg) Aula 29 Avaliação Final Encerramento e avaliação final
Atividades (Individual) 15%
Percentual de Atividades Conceito Com Participação Voluntária
50% C C+
70% B B+
90% A A+
Projeto 1 (Grupo) 10%

Mineração de criptomoedas em CPU

Este projeto consiste na implementação e otimização de um minerador de criptomoedas que roda em CPU. Aplicando técnicas de paralelismo para melhorar desempenho no cluster Franky. A dificuldade da mineração é ajustada pela quantidade de zeros no hash, aumentando o desafio computacional conforme otimizimos a aplicação.

Rubrica Critérios Técnicos
C Executa o código minerador assíncrono no cluster Franky com dificuldade **5 zeros e pelo menos 5 gerações diferentes de async_gen`.
B Executa o código minerador assíncrono no cluster Franky com dificuldade 6 zeros e pelo menos 5 gerações diferentes de async_gen; utiliza paralelismo ou distribuição do código em CPU.
A Executa o código minerador assíncrono no cluster Franky com dificuldade 7 zeros e pelo menos 5 gerações diferentes de async_gen; realiza paralelização e distribuição do código em CPU.

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+
Projeto 2 (Individual) 20%

Projeto Minerador em GPU Neste projeto, o foco é explorar o uso de paralelismo e estratégias de otimização em GPU para maximizar o desempenho computacional.

Objetivos principais:

  • Executar o projeto utilizando o sistema de HPC SDumont, do LNCC;

  • Implementar estratégias de paralelismo e distribuição em GPUs;

  • Aumentar a dificuldade da mineração (número de zeros);

  • Comparar desempenho, eficiência e consumo de recursos entre as versões CPU e GPU;

Rúbrica de Avaliação

Nível Critérios Técnicos Complexidade Computacional Esperado
Rúbrica C Parte da otimização realizada em CPU e parte implementada em GPU, executada no SDumont 7 zeros
Rúbrica B Paralelismo e distribuição em CPU, com parte da otimização feita em GPU, utilizando o SDumont 8 zeros
Rúbrica A Paralelismo e distribuição focados principalmente em GPU, com tarefas simples executadas em CPU, utilizando o sistema SDumont 9 zeros

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+