Programação Paralela e Concorrente
Apresentação da Disciplina e Objetivos
LEP - 01579: Programação Paralela e Concorrente I
Pré-requisito: LEP 01732:
Créditos: 4
Carga Horária: 68h (4*17)
PS: eventualmente oferecida na graduação pré requisito LEP - 01447.
Horários das aulas
Terça-feira das 8:30h às 11:30h
Sala
Sala de aula do LDSC.
Equipamentos
Computadores com sistema operacional Gnu/Linux - Fedora.
Monitoria
Nome do monitor:
Atualmente sem monitor.
Horário de monitoria:
Quinta feira: 10:00 - 12:00 hs
Segunda a sexta: 13:00 - 14:00 hs
Quarta feira: 18:00 - 20:00 hs
Objetivos
Ao final da disciplina ter conhecimentos e capacidade de desenvolver softwares usando processamento paralelo.
Conhecer os conceitos associados ao processamento paralelo e concorrente.
Aplicar processamento paralelo com múltiplos processos.
Aplicar processamento paralelo usando Boost.Interprocess.
Aplicar processamento paralelo com múltiplas threads de C++11/14/17/20/23.
Conceito e aplicações de cluster de computadores.
Resumo da Ementa
Introdução ao processamento paralelo e concorrente. Processamento paralelo com múltiplos processos. Processamento paralelo usando Boost.Interprocess. Introdução ao processamento paralelo com múltiplas threads de C. Processamento paralelo com múltiplas threads de C++11/14/17/20/23. Introdução ao processamento paralelo em um cluster de computadores.
Conteúdo Programático
Introdução ao processamento paralelo e concorrente
O aumento da demanda por processamento; a resposta da indústria;
O que você precisa saber para fazer processamento paralelo - Conceitos básicos;
Arquiteturas de computação paralela;
A arquitetura clássica de von Neumann;
Arquiteturas de memória (UMA/NUMA/ distribuída/híbrida);
Arquiteturas de processamento (SISD; SIMD; MISD; MIND; placas vídeo);
Modelos de computação paralela; Lei de Amdahls;
Modelos de divisão dos dados; Modelos de divisão das tarefas (delegação; ponto a ponto; linha de produção; produtor-consumidor);
Modelos de implementação (SPMD; MPMD);
Tipos de paralelismo (manual; automático; semi-automático);
Dificuldades (data race; indefinit postmente; deadlock; Sincronização; compartilhamento de recursos);
Escalabilidade; Complexidade dos algoritmos;
Tipos de processamento paralelo (SWAR; SMP; Cluster; Híbrido);
Tarefas mínimas (decomposição; comunicação; sincronização).
Diagramas UML aplicados ao processamento paralelo;
Bibliotecas (PVM, MPI, Múltiplas threads; Múltiplos processos);
Passo a passo para processamento paralelo.
Introdução ao processamento paralelo com múltiplos processos
Estrutura e características de um processo.
Estados e recursos de um processo. Tipos de processos; Recursos(ipcrm;setlimit;getlimit;getrusage);
Roteiro para um programa com múltiplos-processos;
DCS(decomposição; comunicação; sincronização);
Como criar(disparar/clonar) e manipular processos (pid; prioridades);
Como distribuir processos;
Como realizar IPC entre processos (variáveis ambiente; pipes; fifos; semáforos; sinais; mensagens; memória compartilhada);
Como sincronizar processos (wait;waitpid; kill);
Como finalizar processos; Exemplos.
Introdução ao processamento paralelo usando Boost.Interprocess
A biblioteca Boost; O que é? Como obter e instalar. Diretórios; Compiladores; bibliotecas e funções específicas (uBlas; data time; filesystem; signals; regex);
A biblioteca Boost.Interprocess; Containers específicos; Uso de memória compartilhada; shared_memory_object; maped_region; basic_managed_shared_memory; lendo blocos/criando objetos/lista encadeada/mutex/variáveis condicionais/fila mensagens/etc - na memória compartilhada; Exemplos;
Introdução ao processamento paralelo com múltiplas threads de C
Introdução as threads (a biblioteca pthreads).
Tipos, estrutura, características e estados de uma thread.
Prioridades;
Diferenças entre threads e processos.
Modelos de threads (delegação, ponto a ponto, pipeline, SPMD, MPMD).
Criando threads.
Cooperação; comunicação e sincronização entre threads (mutex; read write; variáveis condicionais; semáforos). Funções básicas de threads em C; Roteiro para desenvolvimento de um programa com múltiplas threads; Exemplos.
Processamento paralelo com múltiplas threads de C++11/14/17/20
Introdução as threads de C++11/14/17/20.
Tipos, estrutura, características e estados de uma thread em C++C++11/14/17/20.
Prioridades; Diferenças entre threads de C++C++11/14/17/20 e processos.
Como criar threads de C++ (função; objeto função; funções lambda; método da classe); Funções para threads (join; detach; joinable; get_id; hardware_concurrency; sleep_for; thread_guard; scoped_thread);
Threads com vetores, listas e pilhas;
Como sincronizar threads (classes mutex; read-write; condicionais; semáforos; async; future; shared_future);
Controle tempo (chrono::duration; time_point; promise; packaged_task);
Exemplos;
Introdução ao processamento paralelo em um cluster de computadores
Introdução a utilização de cluster de computadores (O que é um cluster; Aplicações para cluster; Histórico; Clusters Petrobras);
Funcionamento básico de um cluster.
Tipos de cluster (Beowulf, Workstations, grid).
Conceitos técnicos relacionados ao uso de clusters (alta disponibilidade - HA; alta performance - HPC; transparência – SSI; escalabilidade; balanceamento de carga; escalonamento; sistemas distribuídos);
Sistemas de gerenciamento de recursos;
O que considerar na montagem de um cluster; Top500; Check-list;
O que você precisa saber?
Exemplos;
Serão apresentados exemplos de algoritmos paralelizados aplicados a problemas da física-matemática e da engenharia usando programação paralela com múltiplas threads e com múltiplos processos.
Os trabalhos de aula serão orientados aos temas de pesquisa de cada estudante ou um projeto definido pelo professor.
Avaliações
Exercícios
Provas e/ou Trabalhos
Trabalhos com tema definido pelo professor ou associado ao IC/mestrado/doutorado do aluno(a).
Lista de Programas a Serem Utilizados
Material Extra
Site com Softwares:
Apostilas:
Apostila: Modelo de IC/MSC/DSC os arquivos para o modelo podem ser baixados no link Github.
Apostila: Calculadoras Científicas RPN Programáveis - Breve Histórico e Exemplos de Uso.
Veja na página de softwares desenvolvidos um emulador para calculadoras HP.
Apostila: Provas e Provas Resolvidas de C++ versão de 2018 (entre em contato para dados atuais).
Apostila: Metodologia Científica em Engenharia (versão bem preliminar em desenvolvimento, disponibiliza apenas para alunos).
Aulas que podem ser uteis:
Github:
Github do LDSC: https://github.com/ldsc
Exemplo Software modo terminal: Simulat - Simulador Transf. Calor e Massa em Telhas
Bibliografia
Veja lista de referências bibliográficas em: Bibliografia Programação
Exemplo: Engenharia de Software
A engenharia de software lida com as diversas etapas e atividades relacionadas ao processo de desenvolvimento de um produto de engenharia, como exemplo um software que realiza cálculos de engenharia. A Figura ilustra um modelo de desenvolvimento. Note que são diversas as etapas e que normalmente são desenvolvidas por uma equipe.
Exemplo: Usando o Git
Usando o Sioftware GIT para o controle de versões.
Exemplo: Usando KCachegrind
Usando o software KcacheGrind para identificar gargalos de desempenho, pontos a serem otimizados (paralelizados).
Exemplo: Imagem Processamento Paralelo
A Figura mostra como funciona o processamento paralelo.
Exemplo: Clonando Processos - Rodando Processos em Paralelo
A Figura mostra como funciona a clonagem de processos.
Exemplo: Múltiplas Threads
A Figura mostra extrato de exemplo de código que roda múltiplas threads.