Skip to content

Burocracias

Horários

Aulas:

Segunda -> 16h30 -- 18h30

Sexta -> 14h15 -- 16h15

Atendimento -> Início 27/02/26

Sexta -> 12:30 às 14:00

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 (2026.1)
Data Aula Tópicos Abordados Atividades
09/fev (seg) 01 Introdução à disciplina; conceitos de HPC; plataforma de HPC; acesso remoto (SSH); políticas de uso do Cluster Franky Criação de conta no cluster; configuração do ambiente; primeiro código em C++; uso da IDE
13/fev (sex) 02 Sistemas de HPC; arquitetura de clusters; rede e hardware; filas e jobs; SLURM; clusters no Brasil e no mundo Atividade prática com SLURM no Cluster Franky; submissão de jobs via SLURM
20/fev (sex) 03 C++ para HPC: vetores; gerenciamento de memória; STL; alocação dinâmica; acesso cache-friendly Exercícios de fixação em C++; análise de desempenho
23/fev (seg) 04 C++ para HPC: matrizes; layout de memória (row-major); acesso sequencial vs aleatório; custo computacional Exercícios de fixação; comparação de padrões de acesso à memória
27/fev (sex) 05 Otimizações em CPU; hierarquia de memória; caches; prefetching; localidade temporal e espacial; loop unrolling Exercícios de otimização em CPU; medição de desempenho
02/mar (seg) 06 Estratégias e algoritmos de otimização; BLAS; Roofline Model; limites computacionais vs memória Exercícios de fixação; análise comparativa de desempenho e relatório técnico
06/mar (sex) 07 Algoritmos avançados de otimização; algoritmo de Strassen; matrizes esparsas; estruturas CSR e CSC Exercícios de fixação; análise de custo computacional
09/mar (seg) 08 Concorrência e paralelismo; modelo fork-join; speedup; eficiência; Leis de Amdahl e Gustafson Exercícios de paralelização; análise de escalabilidade
13/mar (sex) 09 Otimizações de memória em estratégias paralelas; false sharing; alinhamento; afinidade de memória Exercícios de fixação; comparação de desempenho antes e depois da otimização
16/mar (seg) 10 Gerenciamento de threads; thread pools; sincronização; barreiras; mutexes Exercícios de fixação; implementação correta sem condições de corrida
20/mar (sex) 11 Aula Estúdio: resolução orientada de problemas reais em HPC Desenvolvimento incremental da APS 1; acompanhamento em sala
23/mar (seg) 12 Aula Estúdio: continuação da APS 1 Desenvolvimento incremental da APS 1
27/mar (sex) 13 Avaliação Intermediária Avaliação prática e teórica
30/mar (seg) 14 Avaliação Intermediária Avaliação prática e teórica
06/abr (seg) 15 Paralelismo com OpenMP; compartilhamento entre threads; efeitos do scheduler; escalonamento estático e dinâmico Exercícios de fixação com OpenMP
10/abr (sex) 16 Efeitos colaterais do paralelismo; race conditions; dependências de dados; recursão Exercícios de fixação; correção de erros concorrentes
13/abr (seg) 17 Memória distribuída; MPI ponto a ponto; Send/Recv; latência e topologias de comunicação Exercícios de fixação; implementação MPI no cluster
17/abr (sex) 18 MPI comunicação coletiva; Broadcast; Scatter; Gather; Reduce Exercícios de fixação; análise de eficiência de comunicação
24/abr (sex) 19 Grupos e comunicadores; programação híbrida MPI + OpenMP Exercícios de fixação; implementação híbrida
27/abr (seg) 20 Introdução à programação paralela em GPU; arquitetura de GPUs; modelo SIMT; hierarquia de memória Exercícios de fixação; primeiro código CUDA
04/mai (seg) 21 Programação em CUDA; kernels; grids e blocks; memória global e compartilhada Exercícios de fixação; implementação de kernels
08/mai (sex) 22 CUDA avançado: stencil, tiling e agendamento de threads Exercícios de fixação; comparação entre versões otimizadas
11/mai (seg) 23 Redução e scan em CUDA; algoritmos paralelos clássicos; uso de memória compartilhada Exercícios de fixação; medição de speedup
15/mai (sex) 24 Matrizes esparsas em GPU; SpMV; computação assíncrona; streams; sobreposição comunicação–cálculo Exercícios de fixação; análise de desempenho
18/mai (seg) 25 Código síncrono vs assíncrono em CUDA; streams; eventos; latência e throughput Exercícios de fixação; comparação quantitativa entre abordagens
22/mai (sex) 26 Revisão geral do conteúdo; exercícios preparatórios para Avaliação Final Lista de exercícios preparatórios
25/mai (seg) 27 Simulado da Avaliação Final Resolução comentada do simulado
29/mai (sex) 28 Avaliação Final Avaliação Final
01/jun (seg) 29 Avaliação Final Avaliação Final
Atividades (Individual) 15%
Percentual de Atividades Conceito
50% C
70% B
90% A
100% A +
APS 1 - Otimizações e Paralelismo em CPU (Individual 10%)

Detalhes em APS 1 - Otimizações e Paralelismo em CPU

Avaliação

A APS será avaliada em 2 aspectos principais;

  • A implementação (4 pontos)
  • O relatório (6 pontos)

Implementação (4 pontos)

A implementação seguirá a seguinte rubrica.

  • 0 - Não compila, não é possível testar a implementação.
  • +1 - Implementou alguma otimização que melhora o algoritmo exaustivo sequencial, mas ainda leva muito tempo para chegar na solução.
  • +1 - Otimizou a heurísitca e conseguiu chegar na solução, mas ainda tem uma implementação sequencial.
  • +2 - Paralelizou o algorítimo e conseguiu chegar na melhor solução no menor tempo possível.

Relatório

O relatório deve apresentar evidências de que os experimentos foram executados e analisados pelo aluno. A avaliação será feita de acordo com os critérios abaixo:

1. Reprodutibilidade dos experimentos (1 ponto)

O relatório deve permitir que qualquer pessoa entenda exatamente como os experimentos foram realizados e o como reproduzir os testes.

  • 0 - Não é possível entender como realizar os testes nem como eles foram executados.

  • +1 - O repositório disponibiliza os arquivos SLURM utilizados e todos os arquivos necessários para realizar os testes, há uma descrição clara dos testes realizados e como reproduzir os experimentos.

2. Evidência de execução dos experimentos (2 pontos)

O relatório deve apresentar resultados obtidos a partir da execução do código. Esses resultados devem ser apresentados em formas de tabela e gráficos.

  • 0 pontos - O relatório não apresenta resultados em forma de tabelas e gráficos.

  • +0.5 ponto - Existe a apresentação dos dados em tabela ou gráfico.

  • +1.5 ponto - O relatório apresenta tabela e gráfico contendo os principais parâmetros de execução dos experimento.

3. Qualidade da análise dos resultados (3 pontos)

A análise deve mostrar que o aluno entendeu as otimizações que realizou e como elas impactaram os resultados obtidos.

  • 0 pontos - Texto do relatório genérico, análises claramente geradas por ferramentas de IA ou explicações inconsistentes com os resultados apresentados.

  • +1 ponto - O relatório menciona resultados, mas a interpretação ainda é superficial.

  • +2 pontos - O relatório relaciona as otimizações implementadas com os dados obtidos de forma clara e objetiva.

A entrega da APS 1 deverá ser realizada até o dia 20/03 as 23h59 pelo Github Classroom

APS 2 20%

APS 2 - Otimizações e Paralelismo em GPU

Um cliente precisa tomar decisões rápidas no mercado de ações. Para isso, ele utiliza simulações estocásticas para prever o comportamento futuro de um ativo com base em dados históricos.

O modelo utilizado pelo cliente é baseado no movimento browniano geométrico, implementado através da equação de Black-Scholes. A partir de um preço inicial e da volatilidade do mercado, ele simula milhares de cenários possíveis para o preço da ação ao longo do tempo.

Cada linha gerada representa um possível “caminho” do preço do ativo, enquanto a linha final média representa o comportamento mais provável segundo o método de Monte Carlo.

No entanto, o sistema atual é extremamente lento, dificultando a tomada de decisões, especialmente em um ambiente onde o tempo de resposta é decisivo.

Seu trabalho será melhorar esse sistema.

Acesse o seu repositório pelo link do Classroom

A data limite de entrega é 25/05/2026 ás 23h59

A APS será avaliada em dois aspectos principais:

  • Implementação (código) → 4 pontos
  • Relatório (.ipynb) → 6 pontos

Implementação (4 pontos)

A nota da implementação será atribuída de acordo com o nível máximo atingido.

2 pontos

Requisitos de código:

  • Pelo menos uma função portada para GPU
  • Uso de pelo menos uma técnica de otimização

Requisitos de execução:

  • Arquivo SLURM corretamente configurado para submissão dos testes no Cluster Franky

Configuração obrigatória nos testes:

  • Laços Internos: 100
  • Laços Externos: 50000
  • Histórico (dias): 948
  • Previsão (dias): 948
  • Preço Inicial: 0.5
  • Taxa de Risco: 0.5

Observação:

Sem execução comprovada nessa configuração, a pontuação não será atribuída.

3 pontos

Requisitos de código:

  • Pelo menos uma função portada para GPU
  • Uso de pelo menos duas técnicas de otimização

Requisitos de execução:

  • Arquivos SLURM corretamente configurados para submissão dos testes

Configuração obrigatória:

  • Laços Internos: 100
  • Laços Externos: 80000
  • Histórico (dias): 1422
  • Previsão (dias): 1422
  • Preço Inicial: 0.5
  • Taxa de Risco: 0.5

Observação:

Sem execução comprovada nessa configuração, a pontuação não será atribuída.

4 pontos

Requisitos de código:

  • Pelo menos duas funções portadas para GPU
  • Uso de duas ou mais técnicas de otimização

Requisitos de execução:

  • Arquivos SLURM corretamente configurados para submissão dos testes

Requisitos de análise:

  • Deve demonstrar entendimento do impacto de:

  • arquitetura da GPU

  • memória
  • paralelismo
  • escalabilidade

Configuração obrigatória:

  • Laços Internos: 100
  • Laços Externos: 100000
  • Histórico (dias): 2370
  • Previsão (dias): 2370
  • Preço Inicial: 0.5
  • Taxa de Risco: 0.5

Observação:

Sem execução comprovada nessa configuração, a pontuação não será atribuída.

Relatório (.ipynb) (6 pontos)

O relatório deve conter os logs de execução, análise e explicação dos resultados.

Critérios de avaliação

Conceito Estrutura Integração e Visualização Profundidade da Análise
Até 2 pts Estrutura desorganizada ou fragmentada Gráficos/tabelas sem conexão com o texto Descrição superficial
Até 4 pts Organização clara e técnica Visualizações próximas das explicações Relaciona resultados com conceitos básicos
Até 6 pts Estrutura integrada (nível científico) Narrativa fluida com dados sustentando argumentos Explica desempenho com base em arquitetura (CPU vs GPU, memória, paralelismo, escalabilidade)

Requisitos mínimos do relatório

Para qualquer nota diferente de zero, o relatório deve conter:

  • Descrição dos experimentos realizados
  • Parâmetros utilizados (loops, tempo, etc.)
  • Evidência de execução (prints, logs ou tabelas)
  • Pelo menos:

  • 1 tabela

  • 1 gráfico

Observações importantes

  • Resultados sem evidência de execução não serão considerados
  • Execuções fora das configurações obrigatórias não pontuam
  • Análises inconsistentes com os dados não serão considerados