Objetivo Geral:
- Introduzir conceitos referentes à programação paralela e distribuída
Objetivos Específicos:
- Aquisição de conhecimentos úteis para desenvolver programação paralela.
- Construção de bases sólidas em arquiteturas paralelas, paralelização de algoritmos, modelos de programação, sincronização de processos e medidas de desempenho, por meio de desenvolvimento de programas e utilização de interfaces apropriadas para programação paralela.
- Familiarizar os alunos com alguns dos problemas, dos algoritmos e das impossibilidades em computação distribuída, de modo a que possam usá-los como blocos básicos no desenvolvimento de sistemas práticos bem como reconhecer a impossibilidade de resolver certos problemas.
- Dotar os alunos das competências necessárias para modelar sistemas e algoritmos distribuídos, especificá-los formalmente e demonstrar que satisfazem as suas especificações.
Conceitos Básicos de concorrência e paralelismo. Conceitos de avaliação de desempenho. Modelos de programação paralela. Modelos de programação por troca de mensagens. Primitivas de Sincronização em memória compartilhada. Algoritmos paralelos com memória compartilhada. Comunicação em rede. Computação em grade.
1. Programação Distribuída
a. Processos e Threads
b. Comunicação entre Processos
c. Sincronização e Ordenação
d. Testes Automáticos
2. Programação Paralela
a. Fundamentos da Programação Paralela:
b. Divisão do Problema, Padrões de comunicação, Sincronização,
c. Granularidade da paralelização,
d. Escalonamento(distribuição do trabalho pelos processadores)
e. Programação de multi-computadores:
f. Introdução ao PVM, MPI e OpenMP.
g. Caracterização da Computação Paralela
h. Modelos de execução, Modelos de Programação, Modelos de Computação,
i. Medidas de Desempenho e Eficiência, Expansibilidade (Função de Isoeficiência)
3. Algoritmos Distribuídos
4. Tecnologias e paradigmas atuais.
- Aula Expositiva
- Leitura Dirigida
- Demonstração (prática realizada pelo professor)
- Laboratório (prática realizada pelo aluno)
- Trabalho de Pesquisa
- Básica:
- Deitel, Harvey M.; Deitel, Paul J. Java: Como Programar. 6a Edição. Prentice-Hall, 2005.
- Tanenbaum, Andrew S. e STEEN, Martin Van. Sistemas Distribuídos: Princípios e Paradigmas. 2ªEd. Prentice Hall: 2007
- J L Hennessy e D A Patterson, Arquitetura de Computadores - Uma Abordagem Quantitativa, 3a Ed, Ed Campus, 2003
- G. Coulouris, J. Dollimore e T. Kindberg, “Sistemas Distribuídos: Conceitos e Projetos”, 4a Edição.
- Tanenbaum, Andrew. Sistemas Operacionais Modernos. Prentice-Hall, 2003.
- Dea, Doug. Concurrent Programing in Java, 2nd Ed., Addison-Wesley, 2000.
- Hyde, Paul. Java Thread Programming. Sams Publishing, 1999.
- Lewis, Bil; Berg, Daniel J. Multithreaded Programming with Java Technology. Prentice Hall, 1999.
- Apresentação da Disciplina
- Introdução
- Modelos de Programação Distribuída
- Processos e Threads
- Comunicação entre Processos
- Sockets (exemplos em Java)
- RPC (exemplos em Java )
- RMI (exemplos em Java)
- Erten
- Web Services (exemplos em Java)
- Sincronização e Ordenação
- Sincronização e Ordenação com Java
- Introdução à Computação Paralela
- Divisão do Problema, Padrões de comunicação, Sincronização
- Medidas de Desempenho
- Modelos Computacionais
- Arquiteturas Paralelas
- Exercícios Práticos:
- Threads
- Sockets
- RMI e XML_RPC
- Sincronização e Concorrência
- Material de Estudo
- Introdução a Programação Paralela e Distribuída
- Processos e Threads
- Teoria - Capitulo 3, "Sistemas Distribuídos: Princípios e Paradigmas", Andrew S. Tanenbaum
- Prática - Capitulo 23, "Java como Programar", Harvey Deitel
- Comunicação entre Processos
- Teoria - Capitulo 4, "Sistemas Distribuídos: Princípios e Paradigmas", Andrew S. Tanenbaum
- Teoria - Capitulo 4, “Sistemas Distribuídos: Conceitos e Projetos”, G. Coulouris, J. Dollimore e T. Kindberg
- Sockets
- Teoria - Capitulo 4, Seções 4.2.2 até 4.2.4, “Sistemas Distribuídos: Conceitos e Projetos”, G. Coulouris, J. Dollimore e T. Kindberg
- Prática - Capitulo 24, "Java como Programar", Harvey Deitel
- RPC
- Teoria - Capitulo 4, Seção 4.2, "Sistemas Distribuídos: Princípios e Paradigmas", Andrew S. Tanenbaum
- Prática - Slides Aula e http://ws.apache.org/xmlrpc/
- RMI
- Teoria - Capitulo 10, Seção 10.3.2 até 10.3.5, "Sistemas Distribuídos: Princípios e Paradigmas", Andrew S. Tanenbaum
- Prática - Slides Aula e http://download.oracle.com/javase/6/docs/technotes/guides/rmi/index.html
- Algoritmos
- "Algoritmos Paralelos usando CGM/PVM/MPI: Uma Introdução", Carceres, E. N., Mogeli, H., Song, S.W.