Entregas e Objetivos¶
atividade 01: Introdução ao Curso - Contextualização do curso, introdução a HPC, entender porque usamos C++ em HPC.
atividade 02: Introdução ao Cluster - Configurar o ambiente de desenvolvimento, submeter o primeiro job no Cluster Franky.
atividade 02: SLURM - Entender como a solicitação de recursos impacta o tempo de execução de uma tarefa e compreender como pedir recursos ao SLURM.
atividade 03: Introdução ao C++ - Introdução a c++.
atividade 03: Usando o poder do C++ - Conhecer técnicas avançadas de C++ que são essenciais para programar códigos eficientes, seguros e preparados para escalar em aplicações de alta performance.
atividade 04: Profiling - Entender como utilizar as flags de compilação e ferramentas de profiling para encontrar gargalos e melhorar o desempenho do código.
atividade 05: Busca Exaustiva - Entender como utilizar recursão para resolver o problema da mochila com busca exaustiva.
atividade 06: Heurística Aleatória - Explorar heurísticas aleatórias para resolver o problema da mochila.
atividade 07: Busca Local Hill Climb - Entender como utilizar busca local e Hill Climb para resolver o problema da mochila.
atividade 08: Problema da Mochila com Heurísticas - Entender como utilizar diferentes heurísticas para resolver o problema da mochila.
atividade 09: Thrust para programação paralela em GPU - Introdução a Thrust.
atividade 10: Iteradores e funções customizadas - Introdução a iteradores e funções customizadas.
atividade 11: Funções Customizadas e Otimização com Fusion Kernel - Criar operações customizadas usando functors, entender como combinar transformações e reduções, e explorar a otimização com fusion kernel.
atividade 12: Trabalhando com Schedulers no OpenMP - Explorar diferentes schedulers do OpenMP, implementar paralelização de loops e recursões usando parallel for e tasks, e analisar estratégias para lidar com efeitos colaterais em regiões paralelas, como o uso de omp critical e pré-alocação de memória.
atividade 13: Pi pelo método de Monte Carlo - Explorar o cálculo de pi usando o método Monte Carlo como exemplo de paralelismo. Aplicar diferentes técnicas de paralelismo para otimizar o desempenho. Analisar o impacto dessas técnicas na sincronização de variáveis compartilhadas e na geração de números aleatórios. Comparar os resultados em termos de precisão e ganho de performance ao paralelizar o algoritmo.