Módulo 1: Introdução à Computação Paralela e Configuração do Ambiente (2 horas)
- Apresentação do curso e dos objetivos
- Conceitos básicos de programação em Fortran
- História e evolução da computação paralela
- Introdução à computação paralela
- Configuração do ambiente de desenvolvimento
- Instalação e configuração do OpenMP
- Exercícios práticos e discussão em grupo
- Fazer o Hello World do OpenMP que será explicado melhor no próximo módulo
Módulo 2: Fundamentos do OpenMP e Memória Partilhada (2 horas)
- O que é OpenMP?
- História do OpenMP
- Por que OpenMP?
- O que é Memória Partilhada?
- Vantagens da Memória Partilhada
- Desafios da Memória Partilhada
- Componentes de um Programa OpenMP
- Diretivas OpenMP
- Estrutura de um Programa OpenMP
- Paralelizando Loops
- Desafios Comuns do OpenMP
- Boas Práticas
- Lista de Exercícios práticos e discussão em grupo
Módulo 3: Sincronização e Gerenciamento de Variáveis em OpenMP (2 horas)
- Sincronização de Threads
- Exemplo Prático: Sincronização
- Variáveis Privadas e Compartilhadas
- Exemplo Prático: Variáveis Privadas
- Gerenciamento de Threads
- Exemplo Prático: Escalonamento
- Lista de Exercícios práticos e discussão em grupo
Módulo 4: Tópicos Avançados em OpenMP (2 horas)
- Redução de Dados
- Exemplo Prático: Redução de Dados
- Secções e Tarefas
- Exemplo Prático: Secções
- Exemplo Prático: Tarefas
- Funções de Runtime do OpenMP
- Lista de Exercícios práticos e discussão em grupo
Módulo 5: Aplicação Prática - Problemas Simples de Computação Paralela (2 horas)
- Introdução a problemas simples que podem beneficiar da computação paralela.
- Implementação passo a passo de algoritmos simples, como ordenação paralela ou busca em paralelo, utilizando OpenMP.
- Discussão dos resultados e comparação com implementações series.
- Lista de Exercícios práticos e discussão em grupo, focando em problemas que os formandos possam encontrar em suas atividades diárias.
Módulo 6: Projeto Final e Avaliação (2 horas)
- Revisão detalhada dos conceitos aprendidos em cada módulo.
- Apresentação de um problema real que possa ser resolvido com OpenMP, como otimização de um algoritmo existente ou paralelização de uma tarefa computacional comum.
- Orientações para o desenvolvimento do projeto final, incluindo critérios de avaliação e expectativas.
- Tempo dedicado para o início do projeto final, com suporte do instrutor.