Programacao Paralela e Distribuida
Identificação sumária dos conteúdos
Desenvolver conceitos de programação paralela em sistemas paralelos ou distribuídos. Integrar os conceitos de programação com os conceitos de arquitetura de computadores, desenvolvendo as aptidões dos alunos no aproveitamento do conjunto hardware-software.
Objetivos da disciplina
- Desenvolvimento de conceitos de programação paralela em sistemas paralelos e/ou distribuídos;
- Explorar ferramentas de programação paralela e distribuída para implementar programas concorrentes;
- Utilizar na prática recursos de arquiteturas de computadores não convencionais, em especial arquiteturas do tipo multiprocessador, dotadas ou não de memória compartilhada;
- Compreensão do problema da decomposição de uma aplicação em um conjunto de tarefas independentes;
- Tratamento de problemas ligados ao balancamento de carga de aplicações em arquiteturas do tipo multiprocessador.
Exigências prévias de conhecimento e habilidades
- Sólidos conhecimentos em programação;
- Prática de programação na linguagem C ou programação concorrente em Java;
- Conhecimento de sistemas operacionais da família Unix;
- Domínio do sistema operacional Linux;
- Conhecimentos básicos de arquiteturas de computadores paralelas;
- Conhecimentos básicos de criação de processos, leves e pesados, de sincronização entre processos, sessões críticas e comunicação e de escalonamento de processos;
- Conhecimento básicos de mecanismos de comunicação entre processos e de comparilhamento de dados via memória comum;
- Prática de programação paralela e/ou concorrente envolvendo os conhecimentos identificados nos ítens f e/ou g.
Padrões mínimos de desempenho
O aluno para ser aprovado deverá mostrar que:
- deve possuir domínio da programação paralela e distribuída em arquiteturas multiprocesadoras;
- deve possuir capacidade de decompor uma aplicação em atividades concorrentes;
- deve possuir domíno de ferramentas de programação paralela.
Conteúdo programático
- Revisão.
- Arquiteturas de computadores não convêncionais. Classificação de Flynn. Arquiteturas dotadas de memória compartilhada. Arquiteturas distribuídas. Agregados de computadores.
- Problemas ligados a programação paralela. Modelos de programação paralela. MIMD, SIMD, pipeline, SPMD, paralelismo de dados. Desempenho de execução. Noção de tarefa concorrente. Sincronização entre tarefas.
- Programação em ambientes distribuídos. Exploração do paralelismo em arquiteturas dotadas de memória distribuída.
- Noção de processo. Criação de uma topologia virtual de processos comunicantes. Programação SPMD.
- Comunicação entre processos. Mensagens síncronas, assíncronas e comunicação de grupo.
- Estudo de caso com ferramenta disponibilizando os recursos de criação remota de processos e compartilhamento de dados via troca de mensagens.
- Programação em ambientes paralelos dotados de memória compartilhada. Exploração do paralelismo em arquiteturas dotadas de memória compartilhada.
- Uso de processos leves. Ciclo de vida de um processo leve. Comunicação entre processos leves: mutex, semáforos, variáveis de condição.
- Diferentes níveis de processos leves: usuário vs. sistema. Escalonamento de processos leves.
- Estudo de caso com ferramenta de programação disponibilizando os recursos de manipulação de processos leves e compartilhamento de dados via memória compartilhada.
- Balanceamento de carga. Escalonamento. Questões de balanceamento de carga: otimizações de execução. Grafo de tarefas. Balanceamento de carga estático. Balanceamento de carga dinâmico.
- Linguagens de Programação. Linguagens de programação tradicionais suportando paralelismo e concorrência. Linguagens de programação paralelas dotadas de mecanismos de balanceamento de carga.
Metodologia e recursos de ensino
- Aulas expositivas;
- Práticas em laboratório;
- Trabalhos individuais e em grupo, avaliados ou não, realizados em aula para estudo de casos;
- Trabalhos individuais e em grupo, avaliados, realizados fora do horário de aula, visando o aprofundamento dos temas abordados em aula e a prática das ferramentas de programação.
Avaliação
- GA = (Teste + (T1+T2)/2)/2
- GA = (Teste + T3 + T4 + T5)/4
- GFinal = 0,33 * GA + 0,67 GB
- T1: Proposta de trabalho de implementação Definição do problema. Aspecto a ser tratado. Ferramental a ser utilizado. Resultados a serem obtidos. Bibliografia.
- T2: Protótipo da Implementação + Relatório de andamento
- T3: Apresentação de um seminário sobre uma ferramenta para PPD
UCP, Nanothreads, Cilk, Athapascan-1, Anahy, ...
- T4: Implementação realizada
- T5: Relatório documentando implementação realizada
Formato de artigo científico. 6 a 8 páginas formato coluna dupla (estilo IEEE)
Bibliografia
- BAKER, Lou. Parallel programming. New York: Mc Grawn Hill, 1996.
- BUYYA, R. (Ed.). High performance cluster computing: architectures and systems. London: Prentice Hall, 1999. v. 1,2.
- FOSTER, Ian. Designing and building parallel programs: concepts and tools for parallel software engineering. Reading: Addison-Wesley, 1995.
- HWANG, K., XU, Z. Scalable Parallel Computing: Technology, Architecture, Programming. New York: MCGrawHill, 1998.
- SPECTOR, D., STONE, M. (Ed.). Building linux clusters. Sebastopol: O'Reilly & Associates, 2000.
Calendário
| Aula |
Data |
Assunto |
Material |
| 1 |
20/fev |
Apresentação da disciplina. Arquiteturas Paralelas |
Apresentacao, Maquinas paralelas, Conceitos |
| 2 |
27/fev |
Feriado |
| 3 |
6/mar |
Multiprogramação leve |
Programacao Concorrente, Multithread |
| 4 |
13/mar |
Continuação |
| 5 |
20/mar |
Laboratório - Threads Posix |
| 6 |
27/mar |
Troca de Mensagens |
MPI |
| 7 |
3/abr |
Continuação |
| 8 |
10/abr |
Laboratório - MPI |
| 9 |
17/abr |
Prova GA |
| 10 |
24/abr |
Modelos de programação. Classificação de modelos. PRAM. BSP. |
Entrega T2 |
| 11 |
1/mai |
Feriado |
| 12 |
8/mai |
Continuação |
| 13 |
15/mai |
Ferramentas de programação (Athapascan-1, Java Party, Cilk, Anahy |
Seminário - T3 |
| 14 |
22/mai |
Continuação |
T3 |
| 15 |
29/mai |
Escalonamento |
Participe: Avaliação institucional |
| 16 |
5/jun |
Mostra Iniciação Científica |
Aud. Sérgio Gomes |
| 17 |
12/jun |
Laboratório |
| 18 |
19/jun |
Prova GB |
Entrega T4 |
| 19 |
26/jun |
Revisão |
Entrega T5 |
| 20 |
3/jul |
Grau C |