Identificação sumária dos conteúdosA disciplina apresenta ferramentas para a programação concorrente e paralela e seu emprego visando a obtenção de processamento de alto desempenho em arquiteturas dotadas de múltiplos processadores. Aborda a decomposição de aplicações em atividades concorrentes e a utilização eficiente dos recursos de hardware através de mecanismos de balanceamento de carga.
Objetivos da disciplinaCapacitar o aluno a utilizar tecnologias de programação concorrente, paralela e distribuída, habilitando-o a tirar proveito de arquiteturas dotadas de múltiplos recursos de processamento para exploração de alto desempenho. Preparar o aluno a realizar a decomposição de problemas em atividades concorrentes e a realizar implementações destes problemas sob a forma de programas concorrentes, paralelos ou distribuídos empregando técnicas de escalonamento e de distribuição de carga.
Exigências prévias de conhecimento e habilidadesO aluno para tirar o máximo proveito da disciplina deve ter conhecimentos sólidos em alguma linguagem de programação.
Padrões mínimos de desempenhoAo final da disciplina o aluno deverá ser capaz de realizar a modelagem e a implementação de uma aplicação paralela, indicando domínio dos métodos e das ferramentas disponíveis para tal. Também deverá ser capaz de detectar características das aplicações e das arquiteturas que possam vir a influenciar no desempenho de execução de um programa.
Conteúdo programático
Metodologia e recursos de ensinoExposição dos temas empregando metodologias e técnicas apresentadas pela literatura de referência na área; Trabalhos, tais análise crítica ou implementação de protótipos, tendo como base artigos tratando o estado da arte na área; Realização de estudos de caso.
Avaliação
Bibliografia sugerida
Avaliação
Média aritmética simples dos seguintes instrumentos:
Calendário
| Aula | Data | Assunto | Material |
|---|---|---|---|
| 1 | 21/set | Motivação ao uso do PAD, Arquiteturas de computadores para o PAD, Agregado de computadores (cluster); Introdução à Programação Concorrente, Recursos primitivos, Semântica de Execução. | Apresentação, Conceitos, Programação Concorrente |
| 2 | 28/set | Programação em Arquiteturas com Memória Compartilhada, Uso de Threads (POSIX) | Multiprogramação leve |
| 3 | 5/out | Programação em Arquiteturas com Memória Distribuída, Uso de MPI (Message Passing Interface) | Comunicação Interprocessos |
| 4 | 12/out | Feriado | |
| 5 | 19/out | Modelos de Concorrência | Modelos |
| 6 | 26/out | Exercícios (avaliado) | |
| 7 | 2/nov | Feriado | |
| 8 | 9/nov | Balanceamento de Carga | |
| 9 | 16/nov | Laboratório de Programação | |
| 10 | 23/nov | Balanceamento de Carga | |
| 11 | 30/nov | Seminário: Ambientes de programação para o processamento de alto desempenho | Paulo, Gustavo, Cicero, Otavio |
| 12 | 7/dez | Seminário: Ambientes de programação para o processamento de alto desempenho | Marlon, Sidnei, Juliano |
| 13 | 14/dez | Outras Ferramentas, Debug, Trace, Avaliação de Desempenho Entrega de todos os trabalhos |