Componente: Programação Paralela Concorrente e Distribuída | Programa de Pós-Graduação em Computação Aplicada

Componente: Programação Paralela Concorrente e Distribuída

Professores: Leonardo Bidese de Pinho e Daniel Gomes Mesquita
Pré-Requisitos: Não
Horas: 30
Créditos: 2
Semestre:

Ementa:
Programação paralela, concorrente e distribuída: conceitos básicos; estratégias de projeto; e verificação de programas. Modelos de programação: memória compartilhada; passagem de mensagens; e suporte a paralelização no compilador. Programação em arquiteturas paralelas: programação multithread; impacto no software causado por questões arquiteturais como pipeline, superescalar, VLIW, SIMD, máquinas vetoriais e MIMD (multicomputadores e multiprocessadores). Mecanismos de sincronização: spin locks, barreiras, semáforos, monitores, seções críticas condicionais e problemas clássicos de sincronização. Mecanismos de passagem de mensagem: conexão entre processos; envio e recebimento de mensagens; e técnicas de programação. Linguagens de programação paralela e sistemasde runtime: Cilk, MPI e OpenMP. Ambientes e ferramentas de programação paralela: depuração, monitoração e análise de desempenho. Considerações sobre desempenho: métricas, escalabilidade, tolerância à overheads e escalonamento eficiente. Estudo de casos reais aplicados à modelagem ambiental.

Bibliografia:

  • ANDREWS, G. Foundations of Mutithreaded, Parallel, and Distributed Programming. Addison Wesley, 2000.
  • ANDREWS, G. Concurrent Programming: principles and practice.  Benjamin/Cummings, 1991.
  • FOSTER, I. Designing and Building Parallel Programs. Addison Wesley, 1995.
  • BUTENHOF, D. Programming with POSIX Threads. Addison-Wesley, 1997.
  • STEVENS, W. Unix Network Programming (Volume I and II). Addison-Wesley, 2003.
  • QUINN, M. Parallel Programming in C with MPI and OpenMP. McGraw-Hill, 2003. The Cilk Project. http://supertech.csail.mit.edu/cilk/