Você está na página 1de 46

Curso de Informtica DCC-IM / UFRJ

Programao Paralela e Distribuda


Um curso prtico

Mario J. Jnior

Gabriel P. Silva

Colaborao: Adriano O. Cruz, Julio S. Aude

Ementa
Paradigma de Troca de Mensagens

PVM MPI

Paradigma de Memria Compartilhada


OpenMP PThreads

Ementa
Conceitos Bsicos de concorrncia e paralelismo. Conceitos de avaliao de desempenho. Modelos de programao paralela. Modelos de programao por troca de mensagens. Programao utilizando PVM e MPI. Exemplos. Modelos de programao com Memria Compartilhada. Conceitos de Thread e Processos. Primitivas de Sincronizao em memria compartilhada. Algoritmos paralelos com memria compartilhada. Programao utilizando bibliotecas OpenMP e Pthreads. Exemplos. Ferramentas de avaliao e depurao de programas paralelos.

Conceitos Bsicos de Paralelismo

Processo
Um processo criado para execuo de um programa pelo sistema operacional. A criao de um processo envolve os seguintes passos:

Preparar o descritor de processo; Reservar um espao de endereamento; Carregar um programa no espao reservado; Passar o descritor de processo para o escalonador.

Nos sistemas operacionais modernos, um processo pode gerar cpias, chamadas de processos filhos.

Processo
Os processos filhos compartilham do mesmo cdigo que os processos pais, contudo no compartilham o mesmo espao de endereamento. A troca de contexto entre processos normalmente um processo lento, que exige uma chamada ao sistema operacional, com salvamento dos registradores e tabelas de gerncia na memria, alm da restaurao dos mesmos para o processo que vai ser executado.

Threads
Muitos dos sistemas operacionais modernos suportam o conceito de threads, ou seja, tarefas independentes dentro de um mesmo processo que podem ser executadas em paralelo ou de forma intercalada no tempo, concorrentemente. Nesses sistemas, uma aplicao descrita por um processo composto de vrias threads. As threads de um mesmo processo compartilham o espao de endereamento de memria, arquivos abertos e outros recursos que caracterizam o contexto global de um processo como um todo.

Threads
Cada thread, no entanto, tem seu prprio contexto especfico, normalmente caracterizado pelo conjunto de registradores em uso, contador de programas e palavra de status do processador. O contexto especfico de uma thread semelhante ao contexto de uma funo e, conseqentemente, a troca de contexto entre threads implica no salvamento e recuperao de contextos relativamente leves, a exemplo do que ocorre numa chamada de funo dentro de um programa.

Threads
Este fato o principal atrativo em favor do uso de threads para se implementar um dado conjunto de tarefas em contraposio ao uso de mltiplos processos. A comunicao entre tarefas grandemente simplificada numa implementao baseada em threads, uma vez que neste caso as tarefas compartilham o espao de endereamento de memria do processo como um todo que engloba as threads, eliminando a necessidade do uso de esquemas especiais, mais restritos e, usualmente, mais lentos de comunicao entre processos providos pelos sistemas operacionais.

Threads
Thread 1
PC

Thread 2
PC

Thread 3
PC

Dados Privados

Dados Privados

Dados Privados

Dados Compartilhados

Paralelismo x Concorrncia
Execuo concorrente est associada ao modelo de um servidor atendendo a vrios clientes atravs de uma poltica de escalonamento no tempo. Execuo paralela est associada ao modelo de vrios servidores atendendo a vrios clientes simultaneamente no tempo. As linguagens de programao podem ento ser classificadas como seqenciais, concorrentes e paralelas. Estudaremos diversos padres de bibliotecas de funes que permitem a codificao de programas paralelos utilizando linguagens convencionais (C, FORTRAN, JAVA, etc.).

Paradigmas de Programao Paralela

Memria Compartilhada
Comunicao atravs de variveis em memria compartilhada. Uso de threads e/ou processos para mapeamento de tarefas. Threads ou processos podem ser criados de forma dinmica ou esttica. Sincronizao

Excluso Mtua Barreira

Alocao de Memria Privada e Global.

Modelos de Programao

Arquitetura de Comunicao

Troca de Mensagens
Comunicao atravs do envio explcito de mensagens. Tarefas so mapeadas em processos, cada um com sua memria privada. Processos podem ser criados de forma esttica ou dinmica. Sincronizao feita de forma implcita pela troca de mensagens ou por operaes coletivas de sincronizao (barreiras).

Troca de Mensagens - Modelo


Processo 1 Processo 2

send(&x, 2);

Movimento dos Dados


recv(&y, 1);

Comunicao Sncrona
O processo que deseja enviar uma mensagem faz uma requisio inicial de autorizao para enviar a mensagem ao processo destinatrio. Depois de receber essa autorizao, a operao de envio ("send") realizada. A operao de envio s se completa quando a operao de recepo (receive) correspondente retorna uma mensagem de acknowlegement. Portanto, ao se concluir a operao de envio, os buffers e estruturas de dados utilizados na comunicao podem ser reutilizados.

Comunicao Sncrona
Este modo de comunicao simples e seguro, contudo elimina a possibilidade de haver superposio entre o processamento da aplicao e o processamento da transmisso das mensagens. Requer um protocolo de quatro fases para a sua implementao do lado do transmissor: pedido de autorizao para transmitir; recebimento da autorizao; transmisso propriamente dita da mensagem; e recebimento da mensagem de acknowledgement.

Comunicao Sncrona
Processo 1 Processo 2

Pede para enviar


tempo

Processo Suspenso

send();

Confirmao Mensagem Ambos continuam

recv();

Comunicao Sncrona
Processo 1 Processo 2

Pede para enviar


tempo

send();

Confirmao Mensagem Ambos continuam

recv();

Processo Suspenso

Comunicao Assncrona Bloqueante


A operao de envio ("send") s retorna o controle para o processo que a chamou aps ter sido feita a cpia da mensagem a ser enviada de um buffer da aplicao para um buffer do sistema operacional. Portanto, ao haver o retorno da operao de envio, a aplicao est livre para reutilizar o seu buffer, embora no haja nenhuma garantia de que a transmisso da mensagem tenha completado ou v completar satisfatoriamente.

Comunicao Assncrona Bloqueante


A operao de envio bloqueante difere da operao de envio sncrona, uma vez que no implementado o protocolo de quatro fases entre os processos origem e destino. A operao de recepo ("receive") bloqueante semelhante operao de recepo sncrona, s retornando para o processo que a chamou aps ter concludo a transferncia da mensagem do buffer do sistema para o buffer especificado pela aplicao. A diferena em relao a operao de recepo sncrona que a mensagem de acknowledgement no enviada.

Comunicao Assncrona No Bloqueante


Na primeira fase, a operao de "send" retorna imediatamente, tendo apenas dado incio ao processo de transmisso da mensagem e a operao de "receive" retorna aps notificar a inteno do processo de receber uma mensagem. As operaes de envio e recepo propriamente ditas so realizadas de forma assncrona pelo sistema. O retorno das operaes de send e de receive nada garantem e no autoriza a reutilizao das estruturas de dados para nova mensagem.

Comunicao Assncrona No Bloqueante


Na segunda fase, verificado se a operao de troca de mensagens iniciada anteriormente pelas primitivas "send" e"receive" j foi concluda. Somente aps esta verificao que o processo que realizou o envio de dados pode alterar com segurana sua rea de dados original. Este modo de comunicao o que permite maior superposio no tempo entre computaes da aplicao e o processamento da transmisso das mensagens.

Comunicao Assncrona
Necessita de um buffer para guardar a mensagem
Processo 1 Processo 2

Buffer de mensagens
tempo

send();

recv();

Continua o processo

L buffer de mensagen

Comunicao Assncrona
Processo 1 Processo 2

Buffer de mensagens
tempo

send();

recv();

Continua o processo

Continua o processo

Etapas da Criao de um Programa Paralelo

Decomposio da Computao em Tarefas


Busca expor suficiente paralelismo sem gerar uma sobrecarga de gerenciamento das tarefas que se torne significativo perante o trabalho til a ser feito. Ou seja, as tarefas de comunicao e sincronizao no podem ser mais complexas que as tarefas de computao. Se isto ocorrer, a execuo em paralelo certamente ser mais ineficiente do que a seqencial.

Mapeamento nos Processadores


Os processos e threads devem ser mapeadas para os processadores reais que existam no sistema. Para que isto seja feito de uma maneira eficiente, deve-se explorar a localidade da rede de interconexo, mantendo os processos relacionados alocados ao mesmo processador. Se a rede apresentar custos de comunicao variveis, alocar os processos com maior carga de comunicao aos ns com menor custo de comunicao entre si.

Alocao de Tarefas
As tarefas devem ser alocadas a processos ou threads de modo que:

Haja um balanceamento de carga adequado e a reduo do tempo de espera por conta da sincronizao; Possa haver uma reduo da comunicao entre processos ou threads; A sobrecarga do gerenciamento dessa alocao, em tempo de execuo, seja a mais reduzida possvel (esttica x dinmica).

Implementao da Funcionalidade
A implementao da funcionalidade dos processos ou threads:

Depende do modelo de programao adotado e da eficincia com que as primitivas deste modelo so suportadas pela plataforma; Explora a localidade dos dados; Reduo da serializao no acesso a recursos compartilhados; Reduo do custo de comunicao e da sincronizao visto pelos processadores; Escalonar as tarefas de modo que aquelas que tenham uma maior cadeia de dependncia sejam executadas mais cedo.

Avaliao de Desempenho

Medidas de Desempenho
Speed-up (Acelerao):

Mede a razo entre o tempo gasto para execuo de um algoritmo ou aplicao em um nico processador e o tempo gasto na execuo com n processadores:

S(n) = T(1)/T(n) Eficincia: E(n) = S(n)/n

Speedup

Lei de Amdahl
ts fts Seo Serial (a) Um processador (b) Mltiplos Processadores (1- f)ts Sees Paralelizveis

p processadores

tp

(1 - f)ts/p

Lei de Amdahl
O fator de acelerao dado por:
ts p S(p) fts (1 f )ts /p 1 (p 1)f

Esta equao conhecida como Lei de Amdahl

Speedup x Processadores
20 f = 0%

Fator de Acelerao S(p)

16 12 f = 5% 8 4 f = 10% f = 20%

12

16

20

Nmero de processadores p

Speedup x Processadores
Mesmo com um nmero infinito de processadores, o speedup mximo est limitado a 1/f , onde f a frao serial do programa. Exemplo: Com apenas 5% da computao sendo serial, o speedup mximo 20, no interessando o nmero de processadores em uso.

Escalibidade
Um sistema dito escalvel quando sua eficincia se mantm constante medida que o nmero de processadores (n) aplicado soluo do problema cresce. Se o tamanho do problema mantido constante e o nmero de processadores aumenta, o overhead de comunicao tende a crescer e a eficincia a diminuir. A anlise da escalabilidade considera a possibilidade de se aumentar proporcionalmente o tamanho do problema a ser resolvido medida que n cresce, de forma a contrabalanar o natural aumento do overhead de comunicao quando n cresce.

Escalibidade
A anlise da escalabilidade considera a possibilidade de se aumentar proporcionalmente o tamanho do problema a ser resolvido medida que n cresce de forma a contrabalanar o natural aumento do overhead de comunicao quando n cresce. Um problema de tamanho P usando N processadores leva um tempo T para ser executado. O sistema dito escalvel se um problema de tamanho 2P em 2N processadores leva o mesmo tempo T. Escalabilidade uma propriedade mais desejvel que o speed-up.

Granulosidade
Granulosidade a relao entre o quantidade de computao e a quantidade de comunicao. uma medida de quanto trabalho realizado antes dos processos se comunicarem. A granulosidade deve estar de acordo com o tipo de arquitetura:

fine-grained medium-grained coarse/large-grained

vector/array processors shared memory multiprocessor network of workstations

Bibliografia
PVM: Parallel Virtual Machine A Users Guide and Tutorial for Network Parallel Computing

Geist, A.; Beguelin, A.;Dongarra, J.; Jiang, W.; Mancheck, B.; Sunderam, V. The MIT Press, 1994 Pacheco, P.S., Morgan Kaufmann Publishers, 1997.

Parallel Programming with MPI

Using MPI-2: Advanced Features of the Message-Passing Interface

Gropp, W.; Lusk, E.; Thakur, R. The MIT Press, 1999. Quinn, Michael J. McGraw-Hill, 1994.

Parallel Computing: theory and pratice

Bibliografia
Parallel Programming in OpenMP

Chandra, R. et alli; Morgan Kaufman Publishers, 2001 Nicholas, D.; Butlar, J.; Farell, P. O`Reilly and Associates Inc., 1999 Kleiman, S.; Shah, D.; Smaalders, B. Sun Soft Press, Prentice-Hall, 1996

Pthreads Programming

Programming with Threads

Foundations of Multithreaded, Parallel and Distributed Programming

Andrews, Gregory R. Addison-Wesley, 2000 Foster, Ian Addison-Wesley Pub. Co, 1994

Designing and Building Parallel Programs

Homepage, Listas, E-mail


http://equipe.nce.ufrj.br/gabriel/progpar e-mail: gabriel dot silva at ufrj dot br grupo: progpar@listas.nce.ufrj.br http://www.ufrj.br/mailman/listinfo/progpar

Avaliao
Quatro trabalhos (Individual, prazo de 15 dias)

22/08 19/09 17/10 21/11 05/09 10/10 14/11 14/12

Quatro Provas