Responsável: Arthur Francisco Lorenzon
Pré-Requisitos: –
Carga Horária: 60 hs
Créditos: 4
SÚMULA
Tópicos especiais de paralelismo e otimização. Impacto do paralelismo no desempenho e energia. Mapeamento de threads e dados. Gerenciamento de frequência de CPU, GPU e memória. Otimização de aplicações paralelas em GPU. Estratégias de comunicação e computação. Arquiteturas paralelas especiais.
OBJETIVOS
A disciplina visa desenvolver as seguintes habilidades específicas: (i) Capacitar o estudante a compreender e aplicar tópicos avançados de paralelismo e otimização, incluindo o impacto do paralelismo no desempenho e no consumo de energia, o mapeamento eficiente de threads e dados e a interação entre arquiteturas paralelas modernas e estratégias de execução. (ii) Desenvolver competências para projetar, otimizar e avaliar aplicações paralelas em GPUs, explorando técnicas de gerenciamento de frequência de CPU, GPU e memória, otimização de kernels, estratégias de comunicação e computação, além de práticas de balanceamento e distribuição de trabalho em arquiteturas especializadas. (iii) Aprimorar a capacidade analítica do estudante no uso de ferramentas e metodologias para identificação de gargalos, análise de eficiência energética e desempenho, permitindo que ele selecione, implemente e justifique estratégias de otimização adequadas em sistemas heterogêneos e arquiteturas paralelas especiais
PROGRAMA
1. Introdução aos tópicos especiais de paralelismo – Revisão de conceitos fundamentais;
2. Impacto do paralelismo no desempenho – Leis de Amdahl e Gustafsson revisadas sob a ótica da otimização; Overheads de paralelismo (sincronização, comunicação, desbalanceamento); Modelos roofline a análise de limites teóricos
3. Impacto do paralelismo na energia – Relação desempenho x energia x potência em sistemas paralelos. Modelos energéticos para CPU e GPU. Métricas de eficiência energética.
4. Mapeamento de Threads e Dados I – Fundamentação teórica de mapeamento de threads e dados em CPUs multicore; Afinidade, distribuição de dados; estratégias comuns.
5. Mapeamento de Threads e Dados II – Otimizações, incluindo minimização de comunicação, maximização de localidade, mapeamento hierarquico
6. Gerenciamento de Frequência em CPU, GPU e Memória – DVFS; Efeitos de frequência no desempenho e consumo; Políticas de power capping e frequency capping
7. Otimização de Aplicações Paralelas em GPU I – Arquitetura geral de GPU; identificação de gargalos; padronização de acesso e coalescência
8. Otimização de Aplicações Paralelas em GPU II – Técnicas avançadas, incluindo reuso de dados, shared memory, streams, pipelines
9. Estratégias de Computação e Comunicação – Padrões de comunicação síncrona e assíncrona; balanceamento de comunicação e computação em arquiteturas heterogêneas; minimização de latência e overheads.
10. Comunicação e Computação em Ambientes CPU-GPU – Transferências host-device e técnicas de minimização; Execução concorrente em múltiplos dispositivos; Streaming, buffers pinados e page migration
11. Otimizações multinível em aplicações paralelas – Otimização em camadas: algoritmo, paralelismo, memória, energia. Técnicas de tuning automático, ferramentas.
12. Arquiteturas Paralelas Especiais I – Arquiteturas para IA, GPUs especializadas, Computação embarcada paralela
13. Arquiteturas Paralelas Especiais II – Processadores com memória integrada; Sistemas heterogêneos de larga escala, paradigmas emergentes
14. Estudos de casos e aplicações reais – Análise de código real; avaliação de desempenho e energia em diferentes arquiteturas; lições práticas sobre mapeamento, DVFS e comunicação
15. Projeto final – Apresentação do projeto final
MÉTODO DE TRABALHO (PRINCIPAIS ATIVIDADES)
A disciplina será conduzida por meio de aulas teóricas e práticas integradas, ,combinando exposição dialogada, análise de exemplos e estudos de caso com atividades experimentais em laboratório. As aulas teóricas utilizarão recursos audiovisuais para apresentar conceitos avançados de paralelismo, impacto no desempenho e energia, mapeamento de threads e dados, otimização em GPU e gerenciamento de frequência. As atividades práticas envolverão exercícios dirigidos de análise e otimização, experimentos de DVFS em CPU e GPU, exploração de estratégias de comunicação e computação, e uso de ferramentas de profiling, tracing e medição energética. O Moodle será empregado como ambiente de apoio para disponibilização de materiais, submissão de atividades e interação em fóruns. Ao longo do semestre, os estudantes desenvolverão atividades individuais e em grupo, aplicando técnicas de otimização e investigando arquiteturas paralelas modernas, de modo a consolidar autonomia técnica, pensamento crítico e capacidade de resolver problemas reais de desempenho e eficiência energética em sistemas paralelos.
Experiências de Aprendizagem:
Ao longo da disciplina, os estudantes vivenciarão experiências de aprendizagem que combinam exploração prática, investigação orientada e reflexão crítica sobre o impacto do paralelismo no desempenho e na energia, incluindo: (i) Exploração prática de conceitos avançados de paralelismo e otimização. (ii) Experimentação de estratégias de mapeamento de threads e dados, DVFS e configurações de execução em CPU e GPU. (iii) Análise de desempenho, eficiência energética e interpretação de métricas como speedup, roofline e EDP. (iv) Testes de hipóteses, comparação de abordagens e depuração de código e experimentos em arquiteturas heterogêneas. (v) Desenvolvimento de autonomia, pensamento analítico e tomada de
decisão técnica na otimização de aplicações paralelas em diferentes arquiteturas.
CRITÉRIOS DE AVALIAÇÃO
A avaliação da disciplina será baseada no desempenho do estudante em atividades práticas e em um projeto final. Ao longo do semestre, serão propostos trabalhos práticos que visam consolidar os conteúdos apresentados em aula, promovendo a experimentação em técnicas de mapeamento de threads e dados, otimização de aplicações paralelas, estratégias de comunicação e computação, além de análises de desempenho e eficiência energética em arquiteturas heterogêneas. Esses trabalhos serão avaliados quanto à implementação correta, ao uso adequado das estratégias de paralelismo e otimização, à clareza do código, à qualidade dos experimentos conduzidos e à interpretação dosresultados. Complementarmente, os alunos realizarão um projeto final, individual ou em dupla, no qual deverão aplicar de forma integrada os conceitos estudados, justificando escolhas técnicas, analisando desempenho e energia e apresentando uma solução otimizada para um problema realista em sistemas paralelos. A nota final refletirá tanto o domínio conceitual quanto a capacidade do estudante de aplicar os conhecimentos em situações práticas.
A nota final será composta por 40% referente aos trabalhos realizados ao longo do semestre e 60% do projeto final. O conceito será atribuído de acordo com a tabela a seguir:
Nota → Conceito
≥ 9,0 → A
≥ 7,5 e < 9,0 → B
≥ 6,0 e < 7,5 → C
< 6,0 → D
BIBLIOGRAFIA
A disciplina será basicamente centrada em artigos de periódicos e conferências, mas os livros abaixo constituem importante material e referência, do qual extrairemos capítulos específicos.
Programming models for parallel computing, Cambridge, Massachusetts: MIT Press,
2015,
1v: digital
Foster, Ian T. “Designing and building parallel programs: concepts and tools for
parallel software engineering”, Addison-Wesley, 1995
Patterson, David A. “Arquitetura de computadores: uma abordagem quantitativa”, 5. ed.
Campus/Elsevier, 2014
Silberschatz, Abraham. “Operating System Concepts” 9 ed. Rio de Janeiro, LTC, 2019.
Tanenbaum, Andrew S. “Modern Operating Systems”, 4 ed. Pearson Prentice Hall,
2016
https://developer.nvidia.com/cuda-toolkit-archive
https://www.openacc.org/specification
https://www.mpi-forum.org/docs/
https://rocm.docs.amd.com/en/latest/