Anda di halaman 1dari 63

Algoritmos Paralelos usando CGM/PVM/MPI: o Uma Introduc a

Edson Norberto C aceres1 o e Estat Dept. de Computac a stica Universidade Federal de Mato Grosso do Sul 79070-900 Campo Grande, MS e o Dept. de Ci encia da Computac a Instituto de Matem atica e Estat stica Universidade de S ao Paulo 05508-900 S ao Paulo, SP edson@dct.ufms.br, caceres@ime.usp.br Henrique Mongelli o e Estat Dept. de Computac a stica Universidade Federal de Mato Grosso do Sul 79070-900 Campo Grande, MS mongelli@dct.ufms.br Siang Wun Song2 o Dept. de Ci encia da Computac a Instituto de Matem atica e Estat stica Universidade de S ao Paulo 05508-900 S ao Paulo, SP song@ime.usp.br

nanciado pelo PRONEX SAI e FAPESP Proc. No. 1997/10982-0 nanciado pela FAPESP Proc. No. 1998/06138-2, CNPq/NSF Collaborative Research Program Proc. No. 68.0037/99-3, e CNPq Proc. No. 52.3778/96-1 e 46.1230/00-3
2 Parcialmente

1 Parcialmente

Cap tulo 1 o Introduc a


1.1 - Sistemas de Computac a o Paralela. 1.2 - Algoritmos Paralelos e Complexidade. 1.3 - Modelos de Computac a o Paralela. 1.4 - Implementac a o de Algoritmos Paralelos.

Objetivos
Introduzir o conceito de um Sistema de Computac a o Paralela e Distribu da. Introduzir o conceito de avaliac a o de um Algoritmo Paralelo e Distribu do. Descrever os principais Modelos de Computac a o Paralela e Distribu da (Mem oria Compartilhada, Rede e Real stico). Apresentar exemplos de Algoritmos Paralelos para os Modelos PRAM, Rede e BSP/CGM. Analisar a eci encia desses Algoritmos nos respectivos Modelos. Efetuar a comparac a o entre os Modelos apresentados. Introduzir o PVM e o MPI, que ser ao utilizados para implementar os algorimos para o modelo BSP/CGM.
Neste cap tulo apresentamos uma vis ao geral do minicurso, destacando os principais modelos de Computac a o Paralela e Distribu da, Algoritmos Paralelos, Complexidade, o conceito da Troca de Mensagens em um Sistema de Computac a o Paralelo e uma uma descric a o dos aspectos funcionais principais do PVM e MPI.

o Paralela e Distribu 1. Sistemas de Computac a da


o Paralela e Distribu Um Sistema de Computac a da consiste de uma colec a o de elementos de computac a o (processadores), geralmente do mesmo tipo, interconectados de acordo com uma determinada topologia para permitir a coordenac a o de suas atividades e troca de dados. Esses processadores trabalham simultaneamente, de forma coordenada, com o objetivo de resolver um problema espec co. Esses sistemas surgiram em func a o da necessidade de solucionar problemas onde a computac a o sequencial n ao consegue obter o uma soluc a o dentro de tempos razo aveis. Utilizaremos o termo Sistema de Computac a Paralela sempre que nos referirmos a um sistema de computac a o paralela e distribu da.

Os sistemas de computac a o paralela podem ser classicados de acordo com diversos aspectos. A classicac a o original dos sistemas de computac a o paralela e popularmente conhecida como taxionomia de Flynn. Em 1966, Michael Flynn classicou os sistemas de computac a o paralela de acordo com o n umero de uxos de instruc o es e o n umero dos uxos de dados. A m aquina cl assica de von Neumann tem um u nico uxo de instruc o es e um u nico uxo de dados, e portanto e identicada como uma m aquina singleinstruction single-data (SISD). No extremo oposto est a o sistema multiple-instruction multiple-data (MIMD), na qual uma colec a o de processadores aut onomos operam seus pr oprios uxos de dados. Na taxionomia de Flynn, esta e a arquitetura mais abrangente. Entre os sistemas SISD e MIMD est ao os sistemas single-instruction multiple data (SIMD) e o multiple-instruction single-data (MISD). Vamos apresentar alguns detalhes dos modelos SIMD e MIMD.
Dados 1 Processador 1

Dados 2 Processador 2 Instruo Unidade de Controle

Memria Global

Dados p Processador p

Figura 1.1: O Modelo SIMD

A Figura 1.1 ilustra o modelo SIMD, onde os processadores executam em paralelo (e ao mesmo tempo) o mesmo programa. Existe uma u nica unidade de controle, que passa a instruc a o a ser executada para todos os processadores ativos. Em cada instante, todos os processadores ativos executam necessariamente a mesma instruc a o sobre dados possivelmente diferentes. No modelo MIMD, exemplicado pela Figura 1.2, os processadores executam em paralelo (ao mesmo tempo) instruc o es que podem ser distintas, est ao interligados atrav es de uma rede de interconex ao. Cada processador e identicado atrav es de um n umero inteiro e al em disso possui associado a ele uma mem oria local, acess vel apenas a ele e n ao existe nenhuma mem oria compartilhada. A operac a o em uma rede pode ser s ncrona ou ass ncrona. Uma discuss ao mais completa da taxionomia de Flynn pode ser encontrada em [20]. Existem muitas outras formas de classicar sistemas de computac a o paralela, en o dos processadores, estrutura de intertre eles, destacamos os seguintes: dispersa conex ao, e sincronismo. Do ponto de vista de dispers ao, os sistemas s ao classicados como sistemas com dispers ao geogr aca, constituindo as redes de computadores e os sistemas dis quinas paralelas. tribu dos, e como sistemas connados, constituindo as m a

Memria Local 1

Dados

Processador 1 Instruo Unidade de Controle 1

Memria Local 2

Dados

Processador 2 Instruo Unidade de Controle 2

Rede de Interconexo

. . .

. . .

Memria Local p

Dados

Processador p Instruo Unidade de Controle p

Figura 1.2: O Modelo MIMD

Uma rede de computadores e denida como um conjunto de computadores aut onomos interligados por um subsistema de comunicac a o, envolvendo canais de comunicac a o. Um sistema distribu do e um sistema composto por um hardware baseado em m ultiplos processadores independentes, interligados atrav es de uma rede de interconex ao, e por um software integrado, explorando o compartilhamento impl cito de recursos. Uma m aquina paralela e simplesmente uma colec a o de processadores, geralmente do mesmo tipo, interconectados de maneira a permitir a coordenac a o de suas atividades e troca de dados. Segundo a estrutura de interconex ao, os sistemas de computac a o paralelos s ao classicados de acordo com a topologia utilizada. De acordo com o sincronismo, podem ser s ncronos, aqueles em onde todos os processadores ativos operam sincronizadamente sob o controle de um u nico rel ogio global comum, compartilhado pelos processadores, ou ass ncronos, aqueles em que existe uma aus encia completa de uma base de tempo comum a todos os processadores que comp oem o sistema e cada processador opera sobre um rel ogio separado. Neste modo, e responsabilidade do programador indicar os pontos de sincronizac a o apropriados sempre que necess ario. Mais precisamente, se dados precisam ser acessados por um processador, e responsabilidade do programador garantir que os valores corretos ser ao obtidos, uma vez que o valor de uma vari avel, compartilhada ou local, muda dinamicamente durante a execuc a o do algoritmo. Independente da classicac a o, temos que, em qualquer sistema de computac a o paralela, os processadores est ao sempre ativos ou inativos. Todos os processadores ativos est ao executando alguma tarefa para colaborar para a soluc a o de um u nico problema. O acesso do processador a algum dado calculado pelo processador , e feito atrav es da comunicac a o entre esses processadores. A maneira como se d a a comunicac a o entre processadores depende do arquitetura da rede de interconex ao do sistema.

Existem v arios tipos de arquiteturas paralelas que implementam diferentes sistemas de computac a o paralela. Para cada arquitetura paralela, temos modelos distintos de desenvolvimento de algoritmos paralelos. Estes modelos, nos quais baseamos o de o paralela e dissenvolvimento de algoritmos, s ao denominados modelos de computac a tribu da. Sistemas de computac a o paralela exigem naturalmente novos algoritmos e programas, tamb em paralelos. Diferentemente do modelo sequencial, a computac a o paralela n ao possui um modelo algor tmico que seja amplamente aceito. A eci encia dos algoritmos paralelos dependem de um conjunto de fatores que s ao diretamente ligados a ` arquitetura da m aquina. Entre estes fatores podemos destacar:

Concorr encia computacional Alocac a o e escalonamento de processos Comunicac a o Sincronizac a o

ria compartilhada, Abordaremos tr es modelos de computac a o paralela: memo rede e real stico. Os algoritmos estudados ser ao projetados para o modelo real stico (BSP/CGM). A implementac a o dos algoritmos ser a feita num ambiente de computac a o paralela distribu da (rede de estac o es de trabalho) utilizando bibliotecas (PVM - Parallel Virtual Machine e a MPI - Message-Passing Interface) que implementam troca de mensagens e a linguagem de programac a o C/C++.

2. Algoritmos Paralelos e Complexidade


O primeiro passo no projeto de um algoritmo paralelo e a decomposic a o do problema em problemas menores. Dessa forma, os problemas menores s ao atribu dos aos processadores para trabalharem de forma simult anea. Basicamente, existem dois tipos de decomposic a o o do dom o funcional. decomposic a nio e decomposic a o do dom Na decomposic a nio, tamb em conhecida como paralelismo de dados, os dados s ao divididos em partes com aproximadamente o mesmo tamanho e ent ao atribu dos aos processadores. Ent ao, cada processador trabalha somente no conjunto de dados que lhe foi atribu do. Os processos podem ter a necessidade se comunicarem periodicamente para a troca de dados. O paralelismo de dados propicia a vantagem de manter um u nico uxo de controle. Um algoritmo que usa o paralelismo dos dados consiste de uma sequencia de instruc o es elementares aplicadas aos dados: uma instruc a o s oe iniciada se a instruc a o anterior terminou a sua execuc a o. O modelo Single-Program MultipleData (SPMD) segue essa id eia, onde o c odigo a ser executado e igual para todos os processadores. Frequentemente, a estrat egia de decomposic a o do dom nio n ao leva ao algoritmo mais eciente para o programa paralelo. Este e o caso quando os conjuntos de dados atribu dos aos diferentes processadores requerem tempos de execuc a o muito diferentes entre si. O desempenho do algoritmo e ent ao limitado pela velocidade do processo mais lento. Muitos processadores podem car ociosos durante um grande intervalo de tempo. o funcional ou paralelismo de tarefas faz mais sentido do que Neste caso, a decomposic a a decomposic a o do dom nio. No paralelismo de tarefas, o problema e decomposto em um grande n umero de tarefas menores e ent ao, as tarefas s ao atribu das aos processadores na

medida em que eles cam dispon veis. Os processadores que rapidamente terminam suas tarefas recebem mais trabalho. O paralelismo de tarefas e implementado com o paradigma cliente-servidor, onde as tarefas s ao alocadas a um grupo de processos escravos atrav es de um processo mestre que tamb em pode executar algumas tarefas. Nos algoritmos sequenciais, o modelo RAM (Random Access Machine) e bastante pr oximo da forma de descrever os algoritmos e da arquitetura de Von Neumam. Logo, a avaliac a o da execuc a o de um algoritmo sequencial est a intimamente ligado a ` an alise de sua complexidade. Como vimos na Sec a o 1., um sistema de computac a o paralela depende de um grande n umero de par ametros, tais como o n umero de processadores, as capacidades de mem orias locais, esquema de comunicac a o e os protocolos de sincronizac a o, fazendo com que o projeto, avaliac a o e an alise de algoritmos paralelos seja bem mais complexa do que no modelo sequencial. Para iniciar, introduziremos duas maneiras gerais comumente usadas para avaliar a execuc a o de um algoritmo paralelo. Seja um dado problema computacional e seja o tamanho da entrada. Denotemos a complexidade sequencial de por . Existe um algoritmo sequencial que nimo, e ainda mais, podemos provar que nenhum algoritresolve com esse tempo m apida. Seja um algoritmo paralelo que mo sequencial pode resolver de forma mais r resolve num tempo em um computador paralelo que com processadores. Denimos o speedup alcanc ado por

como

O valor mede o speedup obtido por um algoritmo quando processadores f est ao dispon veis para utilizac a o. E acil vericar que o melhor speedup poss vel de ser alcanc ado e O objetivo e projetar algoritmos paralelos que alcancem . Na realidade, existem v arios fatores que introduzem ineci encia nos algoritmos paralelos. Dentre esse fatores destacamos os atrasos que s ao introduzidos pela comunicac a o, a sobrecarga ocorrida na sincronizac a o das atividades dos v arios processadores e no controle do sistema. Note que , e o tempo do algoritmo paralelo quando o n umero de pro cessadores e igual a 1, n ao e necessariamente o mesmo que ; portanto, o speedup e medido relativamente de acordo com o melhor algoritmo sequencial poss vel. E comum considerar o como o tempo do melhor algoritmo sequencial conhecido, sempre que a complexidade do problema n ao e conhecida. Outra medida de execuc a o do algoritmo paralelo

e a eci encia, denida por:

Esta medida proporciona uma indicac a o da utilizac a o efetiva de processadores relativa ao algoritmo dado. Um valor de aproximadamente igual a 1, para algum , apido usando procesindica que o algoritmo executa aproximadamente vezes mais r sadores do que o faria usando apenas 1 processador. Segue que cada um dos processadores

est a trabalhando durante cada passo de tempo relativo ao total do trabalho requerido pelo algoritmo . es do qual o Existe um limite no tempo de execuc a o denotado por , atrav algoritmo n ao pode executar nada mais r apido, independente do n umero de processadores. Portanto, , para qualquer valor de , e a eci encia satisfaz . Entretanto a eci encia de um algoritmo degrada rapidamente enquanto cresce acima de . Para descrever os algoritmos paralelos utilizaremos as instuc o es de um Algol like (programac a o estruturada) com uma construc a o adicional: a para em paralelo fac instruc ao 1; . . . o k; instruc a Onde e um conjunto e cada elemento e associado a um processador. processadores. Cada processador executada as instruc o es 1 No total s ao utilizados at e , sequencialmente, em paralelo de forma sincronizada com os demais processadores, o iniciam a execuc a o da instruc a o ap os todos para cada , ou seja os processadores s a o e um os processadores terem terminado de processar a instruc a o . Essa construc comando de alto n vel, ou seja, cria processos e aloca-os nos processadores. Vimos, nesta sec a o, algumas formas de avaliar a execuc a o de algoritmos paralelos. Para analisar a complexidade de algoritmos paralelos, necessitamos denir um modelo que incorpore os diferentes aspectos presentes num sistema de computac a o paralela.

o Paralela e Distribu 3. Modelos de Computac a da


O principal objetivo do projeto de um algoritmo paralelo e o de obter um desempenho superior com relac a o a ` vers ao sequencial. Com isto em mente, existem diversos fatores que necessitamos considerar para projetar nossos algoritmos paralelos com o intuito de obter o melhor desempenho poss vel dentro das restric o es do problema sendo solucionado. Esses o da comunicac o e sobreposic o fatores s ao: balanceamento de carga, minimizac a a a o e computac o. de comunicac a a Balanceamento de carga e a tarefa de dividir equitativamente o trabalho entre os processadores dispon veis. O tempo de execuc a o total do algoritmo e a principal preocupac a o da programac a o paralela pelo fato que de ser um componente essencial na comparac a o e melhoramento dos programas. O tempo de execuc a o de um programa e composto de tr es componentes: o; tempo ocioso e tempo de comunicac o. tempo de computac a a o e O tempo de computac a o tempo gasto na execuc a o das computac o es sobre os dados do problema. Como vimos no sec a o 2., o ideal e que se tivermos processadores trabalhando na execuc a o de um problema, a execuc a o do algoritmo ser a nalizada em - esimas unidades de tempo do algoritmo sequencial. Nesse caso, todo o tempo dos processadores seria gasto na computac a o.

Denominamos tempo ocioso o tempo que um processador gasta aguardando dados de outros processadores. Durante esse tempo, os processadores n ao fazem nenhum trabalho u til. o e Finalmente, o tempo de comunicac a o tempo utilizado pelos processos para o pode ser medido em enviar e receber mensagens. O custo do tempo de comunicac a termos da lat encia e da largura da banda. A lat encia e o tempo utilizado na preparac a o do pacote para comunicac a o, e largura da banda e a velocidade real de transmiss ao, ou bits por unidade de tempo. Programas sequenciais n ao utilizam comunicac a o entre o da comunicac o necessitamos diminuir o tempo os processos, portanto na minimizac a a de comunicac a o. Se compararmos o tempo gasto de comunicac a o com o tempo total de execuc a o algoritmo, temos que a reduc a o dos custos de comunicac a o e uma das melhores formas de se obter aumento do desempenho dos algoritmos. Existem diversas formas de minimizar o tempo ocioso dentro dos processos e o de comunicac o e computac o, que consiste na atribuic uma delas e a sobreposic a a a a o de uma ou mais novas tarefas para manter ocupado um processo enquanto esse processo aguarda a nalizac a o de uma determinada comunicac a o. Isso e bastante dif cil de ser obtido na pr atica. Na concepc a o de um modelo para algoritmos paralelos, temos que levar em conta todos os aspectos descritos acima, para isto precisamos denir modelos sob os quais os algoritmos paralelos ser ao desenvolvidos. No caso sequencial, o modelo RAM (Random Access Memory), utilizado para o projeto e an alise de algoritmos sequenciais, consiste de uma unidade central de processamento com uma mem oria de acesso aleat orio anexada a ela. O conjunto t pico de instruc o es para este modelo inclui a leitura e escrita na mem oria, e operac o es aritm eticas e l ogicas b asicas. O acesso a qualquer posic a o da mem oria pode ser efetuado em tempo constante. No modelo para a computac a o paralela, a situac a o e mais complexa em virtude da exist encia de um conjunto de processadores interconectados e mem orias locais anexadas a esses processadores. A garantia de que o acesso a qualquer posic a o da mem oria pode ser feito em tempo constante ca condicionada a ` exist encia de uma mem oria global e a eci encia da rede de interconex ao que providencia a comunicac a o entre os processadores e a mem oria global. No caso da n ao exist encia dessa mem oria global o tempo de acesso depender a da lat encia e largura de banda da rede interconex ao. Al em dos aspectos abordados at e aqui, um modelo algor tmico para descrever e analisar algoritmos paralelos tamb em deve satisfazer os seguintes requisitos. Simplicidade: o modelo deve ser simples o suciente para descrever algoritmos paralelos facilmente, para analisar matematicamente medidas de execuc a o importantes como velocidade, comunicac a o e utilizac a o da mem oria. E ainda, o modelo n ao deve ser vinculado a nenhuma classe particular de arquiteturas, e portanto deve ser independente de hardware. Implementabilidade: o algoritmo paralelo desenvolvido para o modelo deve ser facilmente implement avel nos computadores paralelos existentes. Uma grande variedade de modelos foi proposta para a computac a o paralela. N ao h a um modelo que seja amplamente utilizado (da mesma forma que o modelo sequencial RAM) para o projeto e an alise de algoritmos paralelos. Vamos apresentar tr es modelos que s ao bastante utilizados no desenvolvimento e an alise de algoritmos paralelos. Poste-

riormente vamos discutir seus m eritos e deci encias. Os modelos s ao: 1. Modelo de Mem oria Compartilhada. 2. Modelo de Rede 3. Modelo Real stico Vamos apresentar diversos algoritmos para esses modelos, analisar as complexidades e fazer uma breve comparac a o entre esses modelos. 3.1. O Modelo de Mem oria Compartilhada O modelo de mem oria compartilhada consiste de um conjunto de processadores, cada qual com uma mem oria local pr opria, podendo executar seus pr oprios programas locais, e a comunicac a o entre os processadores e feita atrav es de uma unidade de mem oria compartilhada. Cada processador e unicamente identicado por um ndice (n umero inteiro), o qual e utilizado localmente. Cada posic a o da mem oria compartilhada tamb em chamada de mem oria global possui uma identicac a o (enderec o) e pode ser acessada por qualquer processador. A cada instante os processadores podem estar em dois estados: ativos ou inativos. Cada processador possui uma unidade de controle, que passa a instruc a o a ser executada no caso do processador estar ativo. Em cada instante, todos os processadores ativos executam instruc o es (diferentes ou n ao), sobre dados possivelmente diferentes. Os dados calculados pelo processador e que ser ao utilizados por outros procesoria compartilhada (utilizando vari aveis sadores ser ao escritos pelo processador na mem globais/compartilhadas). Esse modelo oferece uma estrutura bastante atrativa para o desenvolvimento de t ecnicas algor tmicas para computac a o paralela. A Figura 1.3 ilustra o modelo de mem oria compartilhada.
P 1
Memria

P 2
Memria

...

P p
Memria

Rede de Interconexo

...

Memria Global

Figura 1.3: O modelo de memoria compartilhada

Existem dois modos b asicos de operac a o em mem oria compartilhada: s ncrono e ass ncrono. Um modelo de m aquina s ncrona padr ao e a Parallel Random Access Machine (PRAM). Desde que cada processador pode executar uma instruc a o ou operar

dados diferentes daqueles executados ou operados por algum outro processador durante uma unidade de tempo, nosso modelo de mem oria compartilhada e do tipo MIMD. Apesar disso, os algoritmos desenvolvidos para o modelo de mem oria compartilhada, mais especicamente para o modelo PRAM t em sido do tipo SIMD. Antes de apresentarmos o pr oximo exemplo, vamos aumentar nossa linguagem algor tmica as duas construc o es seguintes: 1. global read(X,Y) 2. global write(U,V) O efeito da instruc a o global read e mover o bloco de dados , armazenado na mem oria compartilhada para a vari avel local . Similarmente, o efeito da instruc a o global write e escrever o dado local na vari avel compartilhada . umeros, e uma PRAM com Exemplo 1 Soma na PRAM. Dado um vetor de n processadores , desejamos computar a soma . Cada processador executa o mesmo algoritmo, descrito aqui para o processador . O Algoritmo 1 implementa esse exemplo. Algoritmo 1 Soma na PRAM Entrada: Um vetor de ordem armazenados na mem oria compartilhada de uma umero do processador . PRAM. As vari aveis locais inicializadas s ao e o n Sa da: A soma das entradas de armazenados na vari avel compartilhada . O vetor mant em seu valor inicial. (1) global read(A(i),a) (2) global write(a,B(i)) (3) para at e fac a (3.1) se ent ao (3.1.1) global read(B(2i-1),x); (3.1.2) global read(B(2i),y); (3.1.3) z x+y; (3.1.4) global write(z,B(i)); (4) se

ent ao global write(z,S);

Fim do Algoritmo Durante os passos 1 e 2, uma c opia de e criada e e armazenada na mem oria compartilhada (podem ser acessadas por qualquer processador). O esquema de computac a o (passo 3) e baseado em uma a rvore balanceada bin aria cujas folhas correspondem aos elementos de . A Figura 1.4 ilustra o algoritmo para o caso onde . O processador respons avel pela execuc a o da operac a o e indicado abaixo do n o representando a operac a o. O algoritimo e s ncrono, ou seja, em uma unidade de tempo cada processador tem a permiss ao de executar uma instruc a o ou permanecer inativo. Note que , que e respons avel pela alterac a o do valor de e por escrever a soma em , est a ao ativos sempre ativo durante a execuc a o do algoritmo, enquanto , , e est apenas durante os passos 1 e 2. Denimos a complexidade de tempo paralelo de um algoritmo PRAM como sendo o tempo total consumido pelo algoritmo (n umero de passos do algoritmo), onde

S=B(1)

P1

B(1) P1 B(1) P1 B(2) P2

B(1)

B(2)

B(3)

B(4)

P1 B(1) =A(1) P1 B(2) =A(2) P2 B(3) =A(3) P3

P2 B(4) =A(4) P4 B(5) =A(5) P5

P3 B(6) A(6) P6 B(7) =A(7) P7

P4 B(8) =A(8) P8

Figura 1.4: Soma na PRAM

cada computac a o efetuada em paralelo contribui com uma unidade para o tempo total, independente do n umero de processadores envolvidos e a complexidade de processadores como sendo o maior n umero de processadores envolvidos em qualquer passo do algoritmo. A complexidade de espac o e denida da mesma forma que no caso sequencial. Dado um algoritmo paralelo PRAM, medimos seu desempenho em termos da an alise do pior caso. Seja um problema para o qual temos um algoritmo PRAM que e executado em tempo (complexidade de tempo paralelo) usando (complexidade de processadores) processadores, para uma inst ancia de tamanho . O produto tempo-processador (n umero de operac o es realizadas) representa o custo do algoritmo paralelo. E f acil vericar que um algoritmo paralelo PRAM pode ser convertido em um algoritmo sequencial que e executado em tempo . Para isso, simplesmente temos que simular os processadores em tempo, para cada passos paralelos. Um algoritmo paralelo para o modelo PRAM e eciente se e executado em tempo par alelo polilogaritmico ( ) usando um n umero polinomial de processadores ( ), o tamanho da entrada do algoritmo. Um algoritmo paralelo PRAM onde e e timo se o seu custo for igual ao tempo do melhor algoritmo sequencial para o probe o lema. Um algoritmo o timo pode deixar de se-lo, se for obtido um algoritmo sequencial mais eciente. Um algoritmo e o timo absoluto se seu custo for igual ao tempo do melhor algoritmo sequencial, e este tempo for igual ao limite inferior do problema. Algoritmos Ecientes Sequenciais Ecientes Paralelos Ecientes Tempo Processadores polinomial 1 polilogaritmo polinomial

Paralelos N ao Ecientes

Para simplicar a apresentac a o de algoritmos PRAM, vamos omitir os detalhes relativos a ` s operac o es de acesso a ` mem oria. Uma instruc a o do tipo ,onde , e s ao vari aveis compartilhadas, devem ser interpretadas como a seguinte sequencia de instruc o es.

global global z x + global

read(B,x); read(C,y); y; write(z,A);

Exemplo 2 Vamos considerar novamente o problema de computar a soma de n umeros armazenados em um vetor utilizando a notac a o simplicada. O algoritmo apresentado anteriormente especicava o programa para ser executado por cada processador , onde . Algoritmo 2 Soma de numeros Eentrada: Um vetor de n umeros, armazenados em Sa da: A Soma

(1) para (1.1) B[i]

em paralelo fac a A[i]

at e fac a (2) para (2.1) para em paralelo fac a (2.1.1) B[i] B[2i-1] + B[2i]

(3) S

B[1]

Fim do Algoritmo Vamos agora analisar a complexidade desse algoritmo. O Passo 1 e executado em tempo . O Passo 2 e executado vezes, em cada execuc a o gasta tempo paralelo . O Passo 3 e executado em tempo . Portanto, a complexidade desse algoritmo e . Temos tempo paralelo com processadores. O custo do algoritmo e que o algoritmo e eciente mas n ao e o timo. Uma importante quest ao relacionada ao modelo PRAM diz respeito ao que acontece quando mais de um processador tenta, ao mesmo tempo, acessar a mesma c elula da mem oria global (leitura e/ou escrita). As diferentes formas de resolver os conitos de leitura ou escrita denem os modelos e submodelos do modelo PRAM. O modelo PRAM Exclusive Read Exclusive Write (EREW) n ao permite qualquer tipo de acesso simult aneo a ` uma posic a o da mem oria compartilhada. O modelo PRAM Concurrent Read Exclusive Write (CREW) permite que acessos simult aneos a uma posic a o da mem oria sejam feitos exclusivamente para leitura. Acessos simult aneos a uma posic a o da mem oria para leitura e escrita e permitido no modelo Concurrent Read Concurrent Write (CRCW). Existem v arios submodelos do CRCW PRAM, eles diferem na forma como a escrita simult anea e tratada. Pode ser demonstrado de que um algoritmo eciente para um dos modelos PRAM tamb em e eciente para qualquer outro modelo. Isso pode ser feito atrav es da simulac a o entre os modelos. J a o conceito de algoritmo o timo depende do modelo e submodelo considerado. Um algoritmo pode ser implementado em dois submodelos com complexidades diferentes. Para maiores detalhes com relac a o a modelos PRAM e simulac a o entre esses modelos, sugerimos uma leitura do trabalho de Karp e Ramachandran [16]. Uma pergunta que podemos fazer e o que aconteceria se o n umero de processadores dispon veis fosse menor do que ? Neste caso podemos aplicar o teorema de Brent que e utilizado para reduzir a complexidade de processadores de um algoritmo (aumentando a complexidade de tempo).

Teorema 1 (Brent) Suponha que um problema possa ser resolvido atrav es de um algoritmo paralelo, com complexidade de tempo paralelo , complexidade de custo operac o es, e complexidade de processadores maior que . Ent a o este algoritmo pode ser implementado com uma complexidade de tempo paralelo e com complexidade de processadores . o: Suponha que no passo , o algoritmo realize operac o es. Logo temos Demonstrac a que: . Se utilizarmos apenas processadores no passo , o tempo total gasto neste passo ser a passos. Ent ao, temos que o tempo total do algoritmo ser a:

Complexidade de tempo: .

Vamos exemplicar a utilizac a o do Teorema de Brent para melhorar a complexidade do Algoritmo 2. Como vimos anteriormente, seu custo e , pior do que a complexidade do algoritmo sequencial que e . Podemos observar que no lac o do o es, na segunda iterac a o, passo 2, na primeira iterac a o s ao executadas adic na terceira, e assim sucessivamente, executando no total adic o es ao nal das iterac o es. Desde que ambos os algoritmos sequencial e paralelo executam adic o es, o custo o timo do algoritmo paralelo da soma existe. Reduzindo o n umero de processadores para , conseguimos obter a mesma complexidade do Algoritmo 2 e um custo o timo. tima Assumimos que nossa PRAM tem proExemplo 3 Soma o cessadores e seja . O vetor de entrada e dividido em subvetores tal que cada processador e respons avel pelo processamento do - esimo . At e a altura da a rvore bin aria, a subvetor gerac a o dos s e dividida de maneira an aloga entre os processadores. O n umero de . Se (equivaoperac o es concorrentes poss veis no n vel e lentemente, , como no Algoritmo 3, dado a seguir), ent ao essas operac o es s ao ario divididas igualmente entre os processaores (passo 2.1 no Algoritmo 3). Caso contr ndices executam essas ( ), os processadores indexados com os menores operac o es (passo 2.2 do Algoritmo 3). O algoritmo executado pelo - esimo processador e dado a seguir. timo da Soma de numeros Algoritmo 3 Algoritmo o para o Processador Entrada: Um vetor de n umeros, armazenados na mem oria compartilhada. As umero de processadores, onde vari aveis locais inicializadas s ao: (1) a ordem ; (2) o n , e (3) o n umero do processador . Sa da: A Soma dos elementos de A armazenada na vari avel compartilhada . O vetor A mant em seu valor original.
fac a (1) para (1.1) B[l(s-1)+j] A[l(s-1)+j]

(2) para (2.1) se

at e fac a ent ao

para at e B[j] B[2i-1] + B[2i] ao (2.2) caso contr ario se ent B[s] B[2s-1] + B[2s] (3) se

fac a

ent ao S

B[1]

Fim do Algoritmo O tempo de execuc a o do algoritmo acima pode ser estimado como segue. O passo 1 utiliza tempo, visto que cada processador executa operac o es. A - esima iterac a o do passo 2 utiliza tempo, visto que um processador tem que executar no o es. O passo 3 utiliza tempo. Portanto, o tempo de execuc a o m aximo operac total do algoritmo e dado por

de acordo com o esperado pelo teorema de Brent. Temos que durante as primeiras iterac o es do algoritmo, cada processador simula o trabalho que seria executado por um conjunto de processadores. Se o n umero de processadores for igual a , podemos observar que o tempo gasto nessas iterac o es n ao altera o tempo de execuc a o total do algoritmo, que e . Depois das primeiras iterac o es, quando n ao mais que processadores s ao necess arios, o algoritmo e id entico ao algoritmo PRAM original. O custo do algoritmo (produto da complexidade do tempo paralelo com o n umero de processadores usados), e . Portanto o algoritmo e o timo. O algoritmo n ao efetua leituras nem escritas concorrentes, logo usa o modelo PRAM EREW. A quantidade dos dados transferidos entre a mem oria compartilhada e as mem orias locais dos diferentes processadores representa a quantidade de comunicac a o necess aria pelo algoritmo. No modelo PRAM esse aspecto n ao e levado em conta, uma vez que assume-se que o tempo de acesso a mem oria por qualquer processador e constante. Esse fato faz com que a complexidade de um algoritmo PRAM seja muito diferente dos resultados de obtidos em implementac o es desse algoritmo em sistemas de computac a o paralela existentes. Em func a o disso, apesar do modelo PRAM ser uma excelente ferramenta para projetar algoritmos paralelos, necessitamos de um modelo que capte os detalhes referentes a comunicac a o do algoritmo. 3.2. O Modelo de Rede O modelo de rede, tamb em chamado de modelo de mem oria distribu da, leva em considerac a o a comunicac a o atrav es da incorporac a o da topologia da rede de interconex ao dos processadores no pr oprio modelo. Uma rede de interconex ao e um conjunto de canais de comunicac a o que ligam os processadores uns aos outros. Nesse modelo, um processador n ao possui acesso a ` uma mem oria local associada a outro processador (mem oria distribu da). Cada posic a o de cada mem oria local possui uma identicac a o (enderec o) e pode ser acessada apenas por seu processador associado. A cada instante os processadores podem estar em dois estados: ativos ou inativos. Cada processador possui

sua unidade de controle, que passa a instruc a o a ser executada para ele. Em cada instante, cada processador ativo executa uma instruc a o, possivelmente diferente da dos demais, sobre dados possivelmente diferentes. O modelo de rede possui arquitetura MIMD e pode operar no modo s ncrono ou ass ncrono. Uma das formas dos processadores se comunicarem no modelo de rede, usando a rede de intreconex ao, e atrav es da troca de mensagens. Na abordagem de troca de mensagens, a divis ao dos dados e das tarefas entre os processadores, al em do gerenciamento das comunicac o es entre eles, e de responsabilbidade do programador. Se um processador precisar, para efetuar alguma operac a o, de um dado que foi calculado pelo processador , o processador envia este dado para o processador (atrav es de uma mensagem), usanao do a rede de interconex ao, e o processador recebe este dado. Os tempos de transmiss das mensagens atrav es da rede de interconex ao s ao indeterminados (por em nitos). Note que, neste caso, um par de processadores n ao necessita obrigatoriamente ser adjacente; o processo de entregar cada mensagem da sua fonte ao seu destino e chamado de roteamento. Para implementar os algoritmos no modelo de redes, precisamos de construc o es adicionais (send e receive) que permitam a comunicac a o entre os processadores. 1. send(X,i) 2. receive(Y,j) a o send, envia uma c opia de X ao proUm processador , ao executar a instruc oxima instruc a o. Um processador , cessador , e passa a executar imediatamente a pr ao executar uma instruc a o receive, suspende a execuc a o de seu programa at e que os dados do processador sejam recebidos. Ent ao, armazena os dados em e continua a execuc a o de seu programa. Essas comunicac o es s ao feitas da seguinte forma: o send realiza o envio de uma mensagem de um processador ao outro e e n ao-bloqueante, e o receive realiza o recebimento de uma mensagem e e bloqueante.
, onde cada v ertice O modelo de rede pode ser visto como um grafo representa um processador, e cada aresta representa um canal de ametros uscomunicac a o bidirecional entre os processadores e . Existem diversos par ados para avaliar a topologia de uma rede. Seja o grafo representando o ancia m axima entre quaismodelo de rede, denimos o di ametro de como sendo a dist representada pelo grau m aximo de . quer par de v ertices. A conectividade de e

Vamos introduzir as seguintes topologias representativas de redes de interconex ao: o array linear, o mesh bidimensional e o hipercubo. V arias outras topologias foram introduzidas e estudadas, n ao est a dentro do esc opo deste trabalho a an alise dessas topologias.

Array Linear e o Anel O array linear consiste de processadores conectados em um array linear. O processador est a conectado ao e ao , sempre que eles existirem. O di ametro aximo de um array linear (m axima dist ancia entre um par de v ertice) e e seu grau m e 2.

P1

P2

P3

P4

P5

P6

P7

P8

Figura 1.5: Um array linear com oito processadores

Um anel e um array linear de processadores onde os processadores e est ao diretamente conectados. Exemplo 4 Soma de um vetor em um anel Seja um vetor de ordem , considere em um anel com proceso problema de computar a soma sadores, onde . Seja . e particionado em blocos, como segue: tem tamanho . Podemos determinar a soma , onde cada calculando , para , e ent ao acumulando a soma . em sua mem oria Se o processador de nossa rede tem inicialmente local, para todo . Ent ao, cada processador pode computar localmente a soma e podemos acumular a soma desses valores percorrendo circularmente o anel. O valor da soma ser a armazenada em . O algoritmo a ser executado por cada processador e dado abaixo: Algoritmo 4 Soma de um vetor em um anel Entrada: (1) O n umero do processador ; (2) O n umero de processadores; (3) O - esimo de tamanho , onde . sub-vetor Sa da: Processador calcula o valor e passa o resultado para a direita. a a soma . Quando o algoritmo termina, ter (1) z (2) se (3) S B[1] + + B[r];
ent ao S 0; caso contr ario receive(S,esquerda);

S+z;

(4) send(S,direita); (5) se

ent ao receive(S,esquerda);

Fim do Algoritmo Cada processador comec a calculando ; e armazena o vetor resultante na vari avel local . No passo 2, o processador inicializa o valor de S com , enquanto cada um dos outros processadores suspende a execuc a o do programa esperando receber o dado do seu vizinho esquerdo. O processador calcula e envia o resultado ao seu vizinho da direita nos passos 3 e 4 respectivamente. Nesse ponto, recebe e retoma a execuc a o de seu programa calculando no passo 3; o processador, ent ao, envia o novo valor para a direita no passo 4. Quando a execuc a o dos programas em todos os processadores termina, possui a soma . o es no passo A computac a o executada por cada processador consiste de operac 1. Nos passos 2 e 3, os processadores executam uma operac a o. Portanto, o tempo de uma constante. execuc a o do algoritmo e , digamos que , onde e e que a soma parcial seja Por outro lado, o processador tem de esperar at

calculada antes que ele possa computar o passo 5. Logo, o tempo total de comunicac a o e proporcional ao produto , onde e o tempo da a taxa na qual a mensagem pode ser transmitida. O tempo total de transmiss ao, e e execuc a oo e dado por . O mesh e uma vers ao bidimensional do vetor linear, que consiste de processadores arranjados em uma matriz , onde o processador est a conectado aos processadores e , sempre que eles existirem. O di ametro de um mesh com processadores e , e o grau m aximo de qualquer n oe 4. Esta topologia tem diversas caracter sticas atraentes, tais como simplicidade, regularidade e escalabilidade. Al em disso, ela traduz as estruturas de computac a o que aparecem em muitas aplicac o es. Contudo, em func a o do di ametro do mesh, quase toda computac a o n ao trivial requer passos. Hipercubo O hipercubo consiste de processadores interconectados em um cubo booleano de dimens ao que pode ser denido como segue. Seja a o bin aria a representac . O processador e conectado aos processadores , onde de , onde , e , para . Em outras palavras, dois processadores s ao conectados se, e somente se, as representac o es bin arias (bits) de seus ndices diferem apenas em uma posic a o. Note que nossos processadores est ao indexados de at e . O hipercubo tem uma estrutura recursiva. Podemos ampliar um cubo de dioes conectando os processadores correspondentes dos mens oes para um de dimens dois cubos de dimens oes. Os enderec os dos processadores de um dos cubos tem o bit mais signicante igual a 0; o outro cubo tem os enderec os dos processadores com o bit mais signicativo igual a 1. A Figura 1.6 ilustra um hipercubo com 4 dimens oes. O di ametro de um hipercubo -dimensional e igual a , visto que a dist ancia igual ao n umero de posic o es (bits) na qual e diferem; entre os processadores e e ancia entre e e . Cada v ertice possui portando, e menor ou igual a , e a dist grau .

0110 0100 0101

0111

1110 1100 1010

1111 1101

0010 0000 0001

0011

1011

1000

1001

Figura 1.6: Um hipercubo tetra-dimensional

Exemplo 5 (Soma no hipercubo) Cada entrada de um vetor de tamanho e ncrono inicialmente armazenado na mem oria local do processador de um hipercubo s processadores. O objetivo e calcular a soma , e armazenar com

no processador . O algoritmo para calcular consiste de iterac o es. A primeira iterac a o calcula somas de pares de elementos entre processadores cujos ndices diferem no bit mais signicativo. Essas somas s ao armazenadas no subcubo -dimensional cujo bit mais signicativo do enderec o e igual a 0. As iterac o es restantes continuam de modo an alogo.

No algoritmo abaixo, o hipercubo opera sincronizadamente, e denota o ndice cujo bit foi complementado. A instruc a o e composta de dois es do canal subpassos. No primeiro subpasso, copia do processador atrav conectando e ; no segundo subpasso, executa a soma , armazenando o resultado em A(i). Algoritmo 5 (Soma no Hipercubo - Algoritmo para o processador ) elementos tal que est a armazenado na mem oria Entrada: Um vetor de local do processador de um hipercubo s ncrono com processadores; onde, . Sa da: A soma armazenada em .

(1) para se

at e 0 fac a ent ao A[i] A[i] + A[i ]

Fim do Algoritmo . Ent ao, durante a primeira iterac a o do Vamos analisar o algoritmo para , , lac o para, as somas e s ao calculadas e armazenadas nos processadores , , e , respectivamente. No nal da segunda iterac a o, obtemos . A terceira iterac a o claramente atrubui e passos paralelos. a soma a . O algoritmo termina depois de Apesar do modelo de rede incorporar a comunicac a o no projeto e an alise de seus algoritmos, a escalabilidade desses algoritmos e bastante reduzida. Por outro lado, a portabilidade e bastante pequena, uma vez que os algorimos incorporam a topologia da aquitetura de rede de interconex ao em seus projetos. Um outro ponto e o fato de que os resultados das implementac o es desses algoritmos em m aquinas existentes nem sempre obt em bons speedups. Isso faz com analisemos outros modelos, onde o resultado previsto pelo modelo te orico seja pr oximo dos obtidos nas implementac o es. 3.3. Modelos Real sticos Durante o nal dos anos 80, o campo de algoritmos paralelos atravessava uma s erie crise. V arios problemas haviam sido estudados, e v arios limites inferiores e superiores foram demonstrados para esses problemas em diferentes modelos de computac a o, tais como mem oria compartilhada, hipercubos e meshs. Quando esses resultados te oricos eram implementados nas m aquinas existentes (usando essas topologias de interconex ao), os speedups obtidos eram muitas vezes desapontadores. Os anos 90 troxeram uma mudanc a signicativa para a a rea com o surgimento de modelos de computac a o paralela com granularidade grossa (Valiant [25]). Nesse modelo, o conceito de computac a o paralela e modelado com uma s erie de superpassos ao inv es de passos com o envio individual de mensagens ou acessos individuais a mem oria compartilhada. Vamos apresentar dois modelos que traduzem os conceitos propostos por Valiant [25], o modelo BSP (Bulk Synchronous Parallel Model) e modelo CGM

(Coarse Grained Multicomputers). Os algoritmos projetados para esses modelos, quando implementados nas m aquinas existentes, t em obtido speedups pr oximos dos previstos em resultados te oricos. Esse fato faz com sejam denominados modelos real sticos. O Modelo BSP O modelo BSP foi proposto por Valiant [25], em 1990. Al em de ser um dos modelos real sticos mais importantes, foi um dos primeiros a considerar os custos de comunicac a o e a abstrair as caracter sticas de uma m aquina paralela em um pequeno n umero de par ametros. O objetivo principal deste modelo e servir de modelo ponte entre as necessidades de hardware e software na computac a o paralela, essa ponte e uma das caracter sticas fundamentais do sucesso do modelo sequencial de Von Neumann. oria local, O modelo BSP consiste de um conjunto de processadores com mem comunicando-se atrav es de algum meio de interconex ao, gerenciados por um roteador e com facilidades de sincronizac a o global. Um algoritmo BSP consiste numa sequ encia de o, como mostra a Figura 1.7. Em superpassos separados por barreiras de sincronizac a um superpasso, a cada processador e atribu do um conjunto de operac o es independentes, consistindo de uma combinac a o de passos de computac a o, usando dados disponibilizados localmente no in cio do superpasso, e passos de comunicac a o, atrav es de instruc o es de o em um superpasso corenvio e recebimento de mensagens. Neste modelo uma h-relac a responde ao envio e/ou recebimento de, no m aximo, h mensagens em cada processador. A resposta a uma mensagem enviada em um superpasso somente ser a usada no pr oximo superpasso. Os par ametros do modelo BSP s ao os seguintes:

: tamanho do problema; : n umero de processadores dispon veis, cada qual com sua mem oria local; : o tempo m nimo entre dois passos de sincronizac a o. Tamb em chamado de par ametro de periodicidade ou lat encia de um superpasso; : e a capacidade computacional dividida pela capacidade de comunicac a o de todo o sistema, ou seja, a raz ao entre o n umero de operac o es de computac a o realizadas em uma unidade de tempo e o n umero de operac o es de envio e recebimento de mensagens. Este par ametro descreve a taxa de eci encia de computac a o e comunicac a o do sistema.
ao utilizados para computar o custo de Os dois u ltimos par ametros, e , s o, o de um algoritmo BSP. O par a comunicac a ametro representa o custo de sincronizac de tal forma que cada operac a o de sincronizac a o contribui com unidades de tempo para o tempo total de execuc a o. Podemos tamb em ver , como sendo a lat encia da comunicac a o, pois os dados recebidos somente podem ser acessados no pr oximo superpasso. A capacidade de comunicac a o de uma rede de computadores est a relacionada ao par ametro . Atrav es deste par ametro podemos estimar o tempo gasto pela troca de dados entre os processadores. Se o n umero m aximo de mensagens enviadas por algum processador durante uma troca simples e , ent ao seriam necess arias at e unidades de tempo determinado empiricamente, para para a conclus ao da troca. Na pr atica, o valor de e cada m aquina paralela, atrav es da execuc a o de benchmarks apropriados [17].

Figura 1.7: O Modelo BSP

o de um superpasso de um algoritmo BSP e Logo, o tempo total de execuc a igual a , onde e , e s ao respectivamente, o n umero de operac o es de computac o es executadas e o n umero de mensagens recebidas e/ou enviadas pelo processador no superpasso . O custo total de um algoritmo e dado pela soma dos custos de cada um dos superpassos. Considerando o n umero de superpassos, seja

a soma de todos os valores de e de cada superpasso. Ent ao, o custo total de o es um algoritmo BSP e . O valor de representa o total de computac locais e o valor de representa o volume total de comunicac a o. O Modelo CGM O modelo CGM foi proposto por Dehne et al [7]. Nesse modelo, os processadores podem estar conectados por qualquer meio de interconex ao. O termo granularidade grossa (coarse grained) vem do fato de que o tamanho do problema e consideravelmente maior que o n umero de processadores, ou seja, . Um algoritmo CGM consiste de uma sequ encia de rodadas (rounds), alternando fases bem denidas de computac a o local e comunicac a o global, como mostra a Figura 1.8. Normalmente, durante uma rodada de computac a o e utilizado o melhor algoritmo sequencial para o processamento dos dados disponibilizados localmente. O CGM e semelhante ao modelo BSP, no entanto e denido em apenas dois par ametros: 1. : tamanho do problema; umero de processadores dispon veis, cada um com uma mem oria local de 2. : n tamanho .

Figura 1.8: O Modelo CGM

Em uma rodada de comunicac a o uma -relac a o (com ) e roteada, isto e , cada processador envia dados e recebe dados. No modelo CGM, o custo de comunicac a o e modelado pelo n umero total de rodadas de comunicac a o. O custo de um algoritmo CGM e a soma dos tempos obtidos em termos do n umero total de rodadas de computac a o local (an alogo ao do modelo BSP) e o n umero de umero total de rodadas de superpassos (an alogo ao do modelo BSP), que equivale ao n comunicac a o. Um algoritmo CGM e um caso especial de um algoritmo BSP onde todas as operac o es de comunicac a o de um superpasso s ao feitas na -relac a o. Conforme observado por Dehne [8], os algoritmos CGM, quando implementados em multiprocessadores atualmente dispon veis, se comportam bem e exibem speedups similares a ` queles previstos em suas an alises. Para estes a lgoritmos, o maior objetivo e minimizar o n umero de superpassos e a quantidade de computac a o local. Algoritmo da Soma no Modelo BSP/CGM Vamos agora apresentar um algoritmo BSP/CGM para o problema da soma dos elementos de um vetor. Exemplo 6 Soma de um vetor no modelo BSP/CGM Seja um vetor de ordem , considere o problema de computar a soma no modelo BSP/CGM . Seja . e particionado em blocos, como com processadores, onde tem tamanho . Para determinar a soma , segue: , onde cada cada processador computa a - esima soma parcial , , e envia , atrav es de uma mensagem, para o processador , que computa para o total das somas parciais. Algoritmo 6 Soma de um vetor no BSP/CGM umero de processadores; (3) O - esimo Entrada: (1) O n umero do processador ; (2) O n sub-vetor de tamanho , onde . e envia o resultado para . Sa da: Processador calcula o valor a a soma . Quando o algoritmo termina, ter

(1) z (2) se (3) se

B[1] + + B[r]; ent ao S z; caso contr ario send(z,P ); ent ao para at e fac a receive(z,P ); S S+z;

Fim do Algoritmo a calculando e armazena Cada processador comec o vetor resultante na vari avel local . No passo 2, o processador inicializa o valor de S com , enquanto cada um dos outros processadores enviam o valor da soma parcial para e nalizam a execuc a o do programa. No passo 3, o processador recebe somas parciais e computa a soma total .
consiste de A computac a o executada por cada processador , operac o es no passo 1. No passo 3, o processador executa operac o es. Portanto, o tempo de computac a o do algoritmo e . Por outro lado, o processador recebe mensagens, todas no mesmo superpasso (BSP) ou rodada (CGM), logo o a o. algoritmo utiliza rodadas de comunicac

o 3.4. Comparac a Embora, para uma dada situac a o, cada um dos modelos paralelos mostrados podem ser claramente vantajosos, os modelos real sticos tem se mostrado bastante apropriados para o projeto, an alise e implementac a o de algoritmos paralelos. O modelo de mem oria compartilhada e apropriado para o projeto e an alise de algoritmos paralelos, pois n ao temos que tratar de todos os detalhes referentes a comunicac a o. Muitos algoritmos foram projetados para o modelo PRAM nos anos 80 e in cio dos anos 90s. Poucas m aquinas dispon veis no mercado implementam o conceito de mem oria compartilhada. Ainda assim, as m aquinas existentes possuem apenas algumas dezenas de processadores, pois existem limitac o es tecnol ogicas para possibilitar a construc a o de m aquinas com um n umero expressivo de processadores e que utilizem mem oria compartilhada. Embora o modelo de rede parec a ser consideravelmente melhor adaptado para resolver problemas computacionais e de comunicac a o do que o modelo PRAM, sua comparac a o com o modelo de mem oria compartilhada e mais sutil. Apesar de que no modelo de rede ser signicativamente mais dif cil descrever e analisar algoritmos, e depender consideravelmente da topologia particular sob considerac a o, topologias diferentes podem necessitar de algoritmos completamente diferentes para resolver o mesmo problema. Os algoritmos projetados para o modelo de rede n ao possuem a portabilidade e a escalabilidade desejada, pois s ao projetados para m aquinas espec cas. A escalabilidade, no caso do hipercubo por exemplo, e cr tica, pois s oe feita atrav es da duplicac a o dos processadores. No caso dos modelos real sticos, ambos os modelos, BSP e CGM, tentam reduzir os custos de comunic a o de modo muito semelhante e buscam caracterizar uma m aquina

paralela atrav es de um conjunto de par ametros, sendo que dois destes se assemelham, o n umero de operac o es de computac a o local e o n umero de superpassos (rodadas no CGM). No entanto, existem algumas diferenc as. Uma delas, segundo G otz [13], e que o modelo CGM simplica o projeto e o desenvolvimento de algoritmos por ser um modelo mais simples e um pouco mais poderoso que o modelo BSP. Al em disso, um algoritmo CGM pode ser transferido para o modelo BSP sem mudanc as. Se um algoritmo CGM executa operac o es de computac a o local, sua o, ent ao o algoritmo BSP perpassos de computac a o e superpassos de comunicac correspondente ter a um custo de , detalhes podem ser vistos em C aceres et al [3]. Em resumo, os modelos BSP e CGM apresentam muitas similaridades. Entretanto o modelo CGM simplica os custos de comunicac a o, facilitando o projeto de algoritmos.

o de Algoritmos Paralelos 4. Implementac a


Uma vez denido o modelo para o projeto e an alise de algoritmos, vamos agora descrever alguns aspectos referentes a implementac a o dos algoritmos projetados para o modelo BSP/CGM. Na implementac a o de algoritmos em sistemas de computac a o paralela utilizando o paradigma de troca de mensagens, temos que levar em considerac a o um grande n umero de fatores, dentre os quais destacamos os seguintes:

arquitetura; formato dos dados; velocidade computacional; carga da m aquina, e carga da rede.

Com o objetivo de tornar transparente ao usu ario todos esses detalhes, foram desenvolvidas v arias bibliotecas que implementam o paradigma da troca de mensagens. Vamos utilizar duas que ao longo dos anos 90 praticamente tornaram-se padr oes nessa a rea, o Parallel Virtual Machine (PVM) e o Message Passing Interface (MPI). Neste cap tulo descrevemos alguns aspectos dessas bibliotecas atrav es da implementac a o do Algoritmo da Soma BSP/CGM utilizando o PVM e o MPI. Nos Cap tulos 2 e 3 introduziremos outras caracter sticas dessas bibliotecas. Uma descric a o mais detalhada de algumas das funcionalidades dessas bibliotecas ser a apresentada no Ap endice. 4.1. PVM O software PVM (Parallel Virtual Machine) providencia uma estrutura unicada dentro da qual programas paralelos podem ser desenvolvidos de uma maneira direta e eciente usando equipamentos de hardware existentes. O PVM possibilita que uma colec a o heterog ena de estac o es de trabalho possam ser vistas como uma u nica m aquina paralela virtual. O PVM trata de forma transparente todo o roteamento das mensagens, a convers ao de dados e o escalonamento das tarefas numa rede de computadores com arquiteturas possivelmente incompat veis.

O modelo computacional do PVM e simples, al em de bastante gen erico, e acomoda uma grande variedade de estruturas de programas de aplicac a o. A interface de programac a o e direta, permitindo que estruturas de programas simples possam ser implementadas de maneira intuitiva. O usu ario escreve sua aplicac a o como uma colec a o de tarefas cooperativas. As tarefas acessam os recursos do PVM atrav es de uma biblioteca de rotinas de interface padr ao. Essas rotinas permitem a inicializac a o e o t ermino das tarefas na rede al em da comunicac a o e sincronizac a o entre as tarefas. As primitivas de troca de mensagens do PVM s ao orientadas para operac o es heterog eneas, envolvendo construc o es de tipos de dados para buffering e transmiss ao. Construc o es para a comunicac a o incluem as de envio e recebimento de estruturas de dados al em de primitivas de alto-n vel tais como broadcast, barreiras de sincronizac a o e soma global. As tarefas do PVM podem ter estruturas de depend encia e controle arbitr arias. Em outras palavras, em qualquer ponto da execuc a o de uma aplicac a o concorrente, qualquer tarefa existente pode iniciar ou nalizar outras tarefas, ou adicionar ou remover computadores da m aquina virtual. Qualquer processo pode se comunicar-se e/ou sincronizar com qualquer outro. Qualquer controle espec co e estrutura de depend encia pode ser implementado em um sistema PVM atrav es do uso apropriado de contruc o es do PVM e instruc o es de controle de uxo da linguagem utilizada. Devido a sua natureza onipresente (especicamente, o conceito de m aquina virtual) e tamb em pela sua simples mas completa interface de programac a o, o sistema PVM tem tido uma grande aceitac a o na comunidade de computac a o cient ca de alto desempenho. Os programas somappvm.c++ e somafpvm.c++ descrevem implementac a o do Algoritmo da Soma BSP/CGM no modelo mestre escravo. uma

// Programa: somappvm.c++ -- vers ao simplificada // Programador: jai2001 // Data: 21/05/2001 // O Di alogo: Este programa inicializa um vetor de TAMMAX // elementos e um conjunto de p tarefas (filhos). Envia // para cada filho um subvetor de tamanho TAMMAX/p. Cada // filho efetua a soma de seu subvetor e envia a resposta // para o pai. O pai recebe as somas parciais dos filhos e // efetua a soma total. // Declarac ao das bibliotecas utilizadas #include<pvm3.h> #include<iostream.h> // cout, endl #include<stdlib.h> // exit #include<iomanip.h> // hex // Declarac ao das constantes globais const unsigned int MSGTAG = 11; // valor arb. para a TAG const unsigned int TAMSTR = 30; // tamanho m aximo da string const unsigned int NUMHOSTS = 4; // hosts maq. virtual const unsigned int TAMMAX = 16; // tamanho do vetor o dos tipos // Declarac a

typedef int Vetor[TAMMAX]; typedef char string[TAMSTR]; typedef string VetorS[NUMHOSTS]; // in cio da func ao principal int main(void) // declaracao das vari aveis locais int Soma = 0, SomaP, mtid, tam; Vetor Tid, SubVetor; VetorS Hosts; int i, j; int VetorDados[16]= 3,-2,5,2,3,7,1,0,4,-3,1,9,6,8,-1,2 ; // Passo 1. Inicilizac ao strcpy(Hosts[0],"knuth.localdomain"); // maq. virtual strcpy(Hosts[1],"knuth.localdomain"); // maq. virtual strcpy(Hosts[2],"knuth.localdomain"); // maq. virtual strcpy(Hosts[3],"knuth.localdomain"); // maq. virtual tam = (int) TAMMAX/NUMHOSTS; // tamanho subvetor // Passo 2. Determine a id da tarefa mtid = pvm mytid(); // Passo 3. Inicialize as tarefa a serem executadas for (i = 0; i < NUMHOSTS; i++) pvm spawn("somafpvm", (char**)0, 1, Hosts[i], 1, &Tid[i]); // Passo 4. Envie os dados as tarefas filhos for (i = 0; i < NUMHOSTS; i++) for (j = 0; j < tam; j++) // Compute o vetor SubVetor[j]=VetorDados[tam*i + j]; pvm initsend(PvmDataDefault); // buffer pvm pkint(&tam, 1, 1); // tamanho do subvetor pvm pkint(SubVetor, tam, 1); // subvetor pvm send(Tid[i], MSGTAG); // envie para o filho i // fim for // Passo 5. Receba as Somas Parciais for (i = 0; i < NUMHOSTS; i++) pvm recv(-1, MSGTAG); // receba de algum filho i pvm upkint(&SomaP, 1, 1); // valor recebido Soma = Soma + SomaP; // i- esima soma parcial // fim for // Passo 6. Imprima o valor da Soma cout << endl << "Soma: < Soma << endl; // Passo 7. Finalize o PVM pvm exit(); exit(0); // fim func ao main

// Programa: somafpvm.c++ // Programador: jai2001 // Data: 21/05/2001 // O Di alogo: Este programa recebe um subvetor da tarefa // pai e efetua a soma dos elementos do subvetor e envia // o resultado da soma parcial a tarefa pai. // Declarac ao das bibliotecas utilizadas #include<pvm3.h> // pvm parent(), pvm recv, pvm upkint, //pvm send, pvm exit #include<stdlib.h> // exit // Declarac ao das constantes const unsigned int MSGTAG = 11; const unsigned int TAMMAX = 16; // Declarac ao de tipos typedef int Vetor[TAMMAX]; // in cio da funcao principal int main(void) // declarac ao das vari aveis locais int mtid, ptid, info, tam, Soma=0; Vetor SubVetor; unsigned int i; // Passo 1. Determine os ids das tarefas mtid = pvm mytid(); // tarefa ptid = pvm parent(); // tarefa pai // Passo 2. Recebe uma MSG da tarefa pai pvm recv(ptid, MSGTAG); // Passo 3. Desempacote a MSG pvm upkint(&tam, 1, 1); // tamanho do subvetor pvm upkint(SubVetor, tam, 1); // subvetor // Passo 4. Calcule a Soma for (i = 0; i < tam; i++) Soma = Soma + SubVetor[i]; // Passo 5. Envie a Soma a tarefa pai pvm initsend(PvmDataDefault); // inicialize buffer pvm pkint(&Soma, 1, 1); // empacote o valor da soma pvm send(ptid, MSGTAG); // envie o conteudo do buffer // Passo 6. Finalize o PVM pvm exit(); exit(0); // fim da func ao main

4.2. MPI O padr ao MPI (Message Passing Interface), cuja especicac a o foi completada em Abril de 1994, e o resultado de um esforc o da comunidade de tentar denir a sintaxe e a sem antica da parte essencial de uma biblioteca de rotinas de troca de mensagens que seria u til a uma grande gama de usu arios e que pudesse ser implementada numa grande variedade de m aquinas paralelas. A principal vantagem de estabecer um padr ao de troca de mensagens e a portabilbidade. Um dos objetivos do desenvolvimento do MPI e o de fornecer aos contrutores de m aquinas paralelas com um conjunto base claramente denido de rotinas que eles podem implementar ecientemente ou, em alguns casos, prover o hardware necess ario para essas rotinas, portanto aumentando a escalabilidade. O MPI n ao tem o prop osito de ser uma infraestrutura de software completo e autocontido que possa ser utilizado em computac a o distribu da. O MPI-1 n ao inclui func o es necess arias ao gerenciamento de processos (a capacidade de iniciar tarefas), congurac a o da m aquina virtual, e suporte de entrada e sa da. Abaixo s ao listados algumas raz oes que fazem com que o MPI venha sendo cada vez mais utilizado. 1. O MPI tem mais que uma implementac a o de boa qualidade dispon vel gratuitamente. 2. O MPI tem total comunicac a o ass ncrona. 3. Os grupos MPI s ao s olidos, ecientes e determin sticos. 4. O MPI gerencia ecientemente os buffers de mensagens. 5. O MPI pode ser utilizado ecientemente para programar computadores parelelos e clusters de estac o es de trabalho. 6. O MPI e totalmente port avel. 7. O MPI e formamente especicado. 8. O MPI e um padr ao. O programa somampi.c descreve uma implementac a o do Algoritmo da Soma BSP/CGM no modelo SPMD. // Programa: somampi.c -- vers ao simplificada // Programador: jai2001 // Data: 21/05/2001 // O Di alogo: Este programa inicializa um vetor de TAMMAX // elementos e um conjunto de p tarefas (filhos). Envia // para cada filho um subvetor de tamanho TAMMAX/p.Cada // filho efetua a soma de seu subvetor e envia a resposta // para o pai. O pai recebe as somas parciais dos filhos e // efetua a soma total. // Declarac ao das bibliotecas utilizadas #include<mpi.h> #include<stdio.h> // printf // Declarac ao das constantes globais const unsigned int MSGTAG = 11; // valor arb. para a TAG const unsigned int TAMMAX = 16; // tamanho do vetor

// Declarac ao dos tipos //typedef int Vetor[TAMMAX]; // in cio da func ao principal int main(int argc, char *argv[]) // declarac ao das vari aveis locais int Soma = 0, SomaP = 0, rank, size, tam; int SubVetor[10]; int i, j; int VetorDados[16]= 3,-2,5,2,3,7,1,0,4,-3,1,9,6,8,-1,2 ; MPI Status status; // Passo 1. Inicilizac ao MPI Init(&argc, &argv); MPI Comm size(MPI COMM WORLD, &size); // n. tarefas MPI Comm rank(MPI COMM WORLD, &rank); // id. da tarefa tam = (int) TAMMAX/size; // tamanho subvetor // Passo 4. Envie os dados as tarefas filhos if (rank == 0) for (i = 1; i < size; i++) for (j = 0; j < tam; j++) // subvetor SubVetor[j]=VetorDados[tam*i + j]; MPI Send(SubVetor, tam, MPI INT, i, MSGTAG, MPI COMM WORLD); // fim for for (j = 0; j < tam; j++) // subvetor P. 0 SubVetor[j]=VetorDados[j]; else // Passo 5. Recebe uma MSG da tarefa 0 MPI Recv(SubVetor, tam, MPI INT, 0, MSGTAG, MPI COMM WORLD, &status); // fim if // Passo 4. Calcule a Soma for (i = 0; i < tam; i++) SomaP = SomaP + SubVetor[i]; // Passo 5. Receba as Somas Parciais MPI Reduce(&SomaP, &Soma, 1, MPI INT, MPI SUM, 0, MPI COMM WORLD); // Passo 6. Imprima o valor da Soma (Processador 0) if (rank == 0) printf("Soma: // Passo 7. Finalize o MPI MPI Finalize(); return 0; // fim funcao main

Cap tulo 2 T ecnicas B asicas


2.1 - Soma de Prexos 2.2 - Ordenac a o 2.3 - List Ranking

Objetivos
Descrever algumas das principais t ecnicas para o desenvolvimento de algoritmos paralelos. Descrever um algoritmo paralelo para ordenac a o. Introduzir problemas b asicos em processamento de listas. Resolver de forma o tima o problema do list ranking paralelo. Analisar a eci encia dos algoritmos apresentados.

1. Soma de Prexos
Considere a sequencia de elementos pertencentes a um conjunto com uma operac a o bin aria associativa, denotada por . As somas de prexos desta sequencia s ao as somas parciais (ou produtos) denidos por

. Esse problema e resolvido no modelo sequencial por um algoritmo bastante sime . Ap os iterac o es, ples. Basta utilizarmos um vetor , onde obtemos o resultado. Esse algoritmo e executado em tempo e e inerentemente sequencial. A soluc a o do problema de Somas de Prexos no modelo BSP/CGM e semelhante ao da Soma de n umeros. A id eia e o de dividir a entrada em (n umero de processadores) subconjuntos, cada um com elementos e distribuir esses subconjuntos entre os processadores (um subconjunto para cada processador). Mais preum vetor de ordem , desejamos computar as Somas de Prexos cisamente, seja com processadores, onde . Seja

. e particionado em blocos, como segue: , onde tem tamanho . Para determinar as Somas Parciais , cada processador cada computa a - esima soma , para , e efetua um broadcast de , atrav es de uma mensagem, para todos os processadores . Cada , processador computa as suas respectivas somas parciais onde .

Algoritmo 7 Somas de Prexos de um vetor no modelo BSP/CGM umero de processadores; (3) O - esimo Entrada: (1) O n umero do processador ; (2) O n de tamanho , onde . sub-vetor Sa da: Em cada Processador as somas de prexo , . (1) B[1] + + B[r]; );

(2) broadcast( (3) S[(i-1)*r] (4) para at e fac a S[(i-1)*r+k] Fim do Algoritmo

S[(i-1)*r+k-1] + B[k]

Teorema 2 O Algoritmo 7 (Somas de Prexo) computa as somas de prexo de elemena tos em tempo , com rodadas de comunicac o. o: Cada processador comec a calculando ; Demonstrac a feito sequencialmente sem a nee armazena o valor resultante na vari avel local . Isso e cessidade de nenhuma comunicac a o. No passo 2, os processadores fazem um broadcast de para os demais processadores. Essa comunicac a o pode ser feita em uma u nica rodada de comunicac a o. No passo 3, cada processador calcula, sequencialmente, o valor da soma dos elementos do vetor e com esse valor, no passo 4 s ao computadas elementos do vetor (com relac a o aos as somas de prexo dos elementos de ). Esses passos podem ser feitos sem necessidade de comunicac a o entre os processadores.
consiste de A computac a o local executada por cada processador , operac o es nos Passos 1 e 4. No passo 3, cada processador executa operac o es. Portanto, o tempo de computac a o do algoritmo e . Por outro lado, cada processador tem que receber mensagens, todas no mesmo superpasso (BSP) ou rodada (CGM), logo o algoritmo termina com rodadas de comunicac a o.

o 2. Ordenac a
Outro procedimento b asico e importante e o de ondenar um conjunto de itens que est ao armazenados em processadores cada um com itens. O algoritmo de Cole [4] efetua a ordenac a o de elementos em tempo paralelo usando processadores no modelo PRAM CREW. Esse algoritmo foi adaptado para o modelo CGM por Goodrich [12]. No algoritmo proposto por Goodrich [12], os elementos est ao uniformemente distribu dos entre os processadores e a ordenac a o efetuada com tempo de computac a o local usando dos elementos e

, e rodadas de comunicac a o, onde a o quando seja, com computac a o local o tima e rodadas de comunicac

ou

Embora esses algoritmos sejam o timos, do ponto de vista te orico, suas implementac o es utilizam uma grande quantidade de detalhes. Vamos agora descrever um algoritmo de ordenac a o mais simplesmais, o CGM split-sort. Esse algoritmo e um pouco menos escal avel, mas ainda e o timo e com muito poucas rodadas de comunicac a o, para . Algoritmo 8 CGM Split Sort . (3) Entrada: (1) Um vetor com elementos. (2) processadores Os elementos do vetor s ao distribu dos entre os processadores ( elementos por processador). Sa da: Todos elementos ordenados dentro de cada processador e por processador, ou seja, se , temos que os elementos em s ao menores que os elementos pertencentes a . (1) Compute um conjunto divisor (2) broadcast(S,); (3) Particionar os elementos de em buckets com ; (4) send( (5) Ordene , );

de acordo

Fim do Algoritmo f E acil vericar que o Algoritmo 8 ordena qualquer entrada, visto que n ao foi efetuado nenhuma restric a o ao tamanho dos buckets. Como no modelo CGM temos que cada processador tem mem oria local, devemos escolher cuidadosamente o conjunto , pois isso inuenciar a no tamanho dos buckets. Vamos apresentar um algoritmo CGM para computar o conjunto (conjunto splitter), que utiliza apenas espac o de mem oria por processador. O m etodo e baseado no particionamento da entrada em subconjuntos do mesmo tamanho como segue. o 1 A mediana de um conjunto ordenado de n u Denic a esimo meros e o - elemento de para esimo com - esimo elemento. mpar ou a m edia do - o 2 Os -quartis de um conjunto ordenado de tamanho s a Denic a o os ele em partes de igual tamanho. mentos, de ndices , que dividem Os -quartis podem ser facilmente computados de forma sequencial usando um algoritmo recursivo em tempo . Algoritmo 9 -quartis Sequencial Entrada: (1) Um vetor com elementos. (2) processadores n umero de quartis. Sa da: O conjunto dividido em -quartis. (1) Compute a mediana de ;
o

(2) Usando a mediana, divida

em dois conjuntos

(3) Aplique o algoritmo recursivamente, at e que ters sejam encontrados; Fim do Algoritmo Usamos o Algoritmo 9 no algoritmo CGM para computar .

split-

Algoritmo 10 -quartis CGM Entrada: (1) Um vetor com elementos. (2) processadores . (3) ao distribu dos entre os processadores ( elementos por Os elementos do vetor s processador). Sa da: O conjunto dividido em -quartis. (1) (3) se
-quartis(

); Ordena(
;

(2) send( , ); ent ao S (4) broadcast(S, ); Fim do Algoritmo Teorema 3 O algoritmo para a determinac a o dos -quartis de um conjunto de elementos e executado no modelo BSP/CGM com processadores em rodadas de comunicac a a . o e tempo de computac o local de , onde o: Demonstrac a O teorema acima pode sem melhorado de tal forma que

Corol ario 1 A ordenac a o de um conjunto de elementos pode ser executada no modelo BSP/CGM com processadores em rodadas de comunicac a o e tempo de computac a o local de , onde .

3. List Ranking
Seja uma lista representada por um vetor tal que e o n o sucessor de na lista ncia entre e , , e , para , o u ltimo elemento da lista , . A dist a o n umero de n os entre e mais 1. O problema do list ranking consiste de computar para ancia entre e , denotado . cada a dist umeros, onde Diferentemente dos problemas da soma e somas de prexos de n as tarefas (somas parciais) foram feitas de forma independente por cada um dos processadores, no problema do list ranking n ao e poss vel aplicar a id eia do Teorema de Brent. O n umero de n os da lista cujos sucessores n ao est ao armazenados no mesmo processador pode variar de 0 a . Mesmo no caso em que todos os sucessores estejam no mesmo processador no passo inicial, nada garante que com a aplicac a o da duplicac a o recursiva (pointer jumping) isso continuar a ocorrendo no passo seguinte. ( A Figura 2.1 ilustra uma lista ligada com os ( ) processadores. Cada processador armazena

) elementos armazenados nos elementos.

primeiro

u ltimo

Proc. 4

Proc. 1

Proc. 2

Proc. 3

Figura 2.1: Uma lista ligada armazenada nos processadores

Pode ocorrer que a cada iterac a o, pelo menos um dos processadores sempre necessite efetuar uma comunicac a o para obter o sucessor de um de seus elementos. Logo, o n umero de rodadas de comunicac a o para obter o list ranking pode chegar a . Ou seja a simples aplicac a o da duplicac a o recursiva na lista n ao leva a um algoritmo CGM eciente. Como vimos anteriormente, o n umero de rodadas de de comunicac a o de um algoritmo CGM eciente deve ser da ordem de ( ). Para diminuir o n umero de rodadas de comunicac a o, a id eia e a de selecionar um conjunto de elementos , bem distribu dos em , de tal forma que a dist ancia de o es de pointer jumping. qualquer a possa ser computada com aplicac Um conjunto com essas caracter sticas e denido a seguir. Um -ruling set de e um subconjunto de elementos selecionados de lista com as seguintes propriedades: (1) Dois vizinhos nunca s ao selecionados. (2) A dist ancia entre qualquer elemento n ao selecionado ao pr oximo elemento n ao selecionado e no m aximo . Logo, a estrat egia para computar o algoritmo do list ranking e a seguinte:
e broadcast para todos 1. Computar um -ruling set com representado por uma lista ligada onde para os processadores. O subconjunto e cada elemento e atribu do um ponteiro para o pr oximo elemento de com respeito a ` ordem induzida por . 2. Todo processador efetua sequencialmente o list ranking de R, computando para ancia ao u ltimo elemento da lista. cada sua dist 3. A dist ancia dos demais elementos da lista e obtida atrav es da duplicac a o recursiva ado. Todos os outros elepointer jumping at e que um elemento de seja alcanc mentos da lista t em no m aximo a dist ancia do pr oximo elemento de na lista.

Todos os passos, exceto a computac a o do -ruling set , podem ser facil-

mente implementados em rodadas de comunicac a o. o determin Vamos introduzir uma nova t ecnica, denominada compress a stica de listas, que possibilita que um -ruling set possa ser computado em rodadas de comunicac a o. Uma compress ao determin stica de listas e composta de uma o. sequencia alternada de fases de compress ao e de concatenac a Na fase de compress ao, utilizando um esquema de rotulac a o (deterministic coin tossing de Cole e Vishkin [5] adaptado ao modelo BSP/CGM) selecionamos um subcon o consiste da construc junto de elementos da lista . A fase de concatenac a a o de uma lista ligada, atrav es da duplicac a o recursiva, com os elementos selecionados na fase de compress ao. ao e o n umero do processador O r otulo usado, , na fase de compress que armazena o n o . O primeiro elemento da lista da Figura 2.1 est a armazenado no processador 2, portanto ser a rotulado com o n umero 2, da mesma forma, o u ltimo elemento e rotulado com o n umero 3. A Figura 2.2 mostra os r otulos de cada elemento da lista. Temos que esse esquema rotulac a o faz com que os elementos de possuam no otulos distintos. Seja um subconjunto de elementos , m aximo r ximo local se , denimos como sendo um m a tal que . Selecionando apenas os m aximos locais, n ao podemos garantir que a dist ancia entre eles seja menor , pois pode haver um subconjunto de elementos consecutivos de onde e . Para contornar esse problema, sempre que tivermos um subconjunto com essas caracter sticas, selecionamos todos os segundos elementos. Algoritmo 11 -ruling set Entrada: (1) Uma lista ligada representada pelo vetor onde lista . (2) processadores . os selecionados. Sa da: Um subconjunto de n (1) para at e fac a ao selecionado; (1.1) sel[i] n
at e fac a (2) para ao sel(s[i]) selecionado; (2.1) se ent ao (2.2) se ent se l(s[i]) = l(s[s[i]]) ent ao selecionado; sel[s[i]] ao sel[i] selecionado; caso contr ario se ent

e o sucessor de na

Fim do Algoritmo O Algoritmo 11 computa um -ruling set , mas pode ser igual a , otulo igual a , ser ao pois se os elementos da lista em cada processador tiverem r selecionados elementos. Para obter com elementos necessitamos executar o Algoritmo 11 vezes. A Figura 2.2 ilustra uma aplicac a o do Algoritmo 11. Os elementos selecionados s ao mostrados com um c rculo preenchido de preto.

r otulo=Proc. # 4 3 2 1 primeiro

u ltimo

Figura 2.2: Elementos rotulados pelos numeros dos processadores

Para obter um -ruling set de elementos selecionados com elementos, necessitamos desmarcar elementos que foram selecionados. Para isso, contru mos uma nova lista ligada com os elementos selecionados e aplicamos novamente o precedimento de marcac a o (m aximos locais e segundos elementos de sublistas no mesmo processador). A Algoritmo 12 computa um subconjunto com essas caracter sticas. Algoritmo 12 -ruling set Entrada: (1) Uma lista ligada representada pelo vetor onde e o sucessor de na lista . (2) processadores e uma c opia de Sa da: Um subconjuno de n os selecionados e . (1) para (1.1) R (1.2) LC

at e fac a -Ruling Set(LC); R;

Fim do Algoritmo
Teorema 4 O Algoritmo 12 computa um -ruling set , onde usando rodadas de comunicac a a o e computac o local por rodada.

o: exerc Demonstrac a cio. Para obter um algoritmo que compute um -ruling set com , temos que arrumar uma estrat egia diferente para diminuir o n umero de elementos selecionados no Algoritmo 11. Temos que se dois elementos selecionados est ao a uma dist ancia a um dados momento, ent ao n ao e necess ario aplicar novamente a compress ao para reduzir o n umero de elementos selecionados. A abordagem b asica do algoritmo a seguir e a de intercalar duplicac a o recursiva (concatenac a o) com compress ao. Mais precisamente, somente aplicaremos um passo de duplicac a o recursiva entre passos consecutivos compress ao, e essa duplicac a o recursiva n ao ser a aplicada aos elementos da lista que est ao apontando para elementos selecionados. Algoritmo 13 -ruling set o sucessor de na Entrada: (1) Uma lista ligada representada pelo vetor onde e lista . (2) processadores e uma c opia de Sa da: Um subconjuno de n os selecionados e . (1) R (2) para
-Ruling Set(LC);

at e fac a

(2.1) para todo em paralelo fac a s[s[i]]; se s[i] = n ao selecionado ent ao s[i] a (2.2) para todo em paralelo fac se (i, s[i] e s[s[i]]) s ao selecionados e NOT ((l(i)<l(s[i])>l(s[s[i]])) AND (l(i) l(s[i])) AND (l(s[i]) l(s[s[i]]))) ent ao s[i] n ao selecionado; (2.3) Sequencialmente, cada processador, processa as sublistas de elementos subsequentes que est ao armazenadas no mesmo processador. Para cada sublista, marque todo segundo elementos como n ao selecionado. Se uma das sublistas possui apenas dois elementos, marque ambos elementos como n ao selecionados; (3) Selecione o ultimo elemento. Fim do Algoritmo Inicialmente vamos demonstrar que o conjunto de elementos selecioandos ao nal do Algoritmo 13 e do tamanho . Lema 1 Ap os a k- esima iterac a o no Passo 2, na o existem mais que dois elementos selecionados entre quaisquer elementos subsequentes na lista original. o: Demonstrac a Vamos agora mostrar que elementos subsequentes selecionados ao nal do Al dados pelos Lemas 2, 3 goritmo 13 tem, no m aximo, dist ancia . Esse resultado e e 4. Lema 2 Ap os cada execuc a o do Passo 2.3, a dist a ncia de dois elementos subsequentes selecionados, com respeito aos ponteiros atuais (representado pelo vetor s), e aximo no m . o: Demonstrac a Lema 3 Ap os a k- esima iterac a o do Passo 2.3, dois elementos subsequentes com respeito aos ponteiros atuais (representado pelo vetor s) tem dist a ncia com repseito a lista original . o: Temos que somente Demonstrac a 2.1. duplicac o es recursivas foram efetuadas no Passo

Lema 4 Quaisquer dois elementos subsequentes selecionados n a o distam um do outro mais que com respeito a lista original L. o: Lema 2 e Lema 3. Demonstrac a

Teorema 5 O problema do list ranking para uma lista com v e rtices pode ser resolvi oria local por processador usando da no modelo CGM com processadores e mem rodadas de comunicac a a o e computac o local por rodada.

Cap tulo 3 Alguns Algoritmos para Problemas em Grafos


3.1 - Euler Tour em Arvores 3.3 - LCA 3.4 - Range M nima

Objetivos
Introduzir diversos problemas em computac a o de func o es em a rvores. Analisar a eci encia dos algoritmos apresentados.

1. Euler Tour em Arvores


V arios algoritmos para problemas em a rvores e grafos incluem soluc o es para problemas estruturais b asicos (problemas de enumerac a o e contagem) como subrotinas. Exemplos de tais subproblemas para a rvores s ao: 1. 2. 3. 4. Encontrar o pai de cada v ertice. Calcular a numerec a o pr e e p os ordem. Computar o n vel de cada v ertice. Determinar o n umero de descendentes de cada v ertice.

Todos esses problemas possuem soluc o es sequenciais em tempo linear que usam basicamente a busca em profundidade. A t ecnica do Euler Tour, proposta por Tarjan e Vishkin [24], e uma aplicac a o do list ranking que pode ser utilizado para construir algoritmos paralelos ecientes para esses problemas. Seja uma a rvore com e designado como um grafo dirigido obtido a partir de onde cada aresta sua raiz. Seja e substitu da por dois arcos (arestas dirigidas) e . Visto que o igual ao grau de sa da, e um grafo Euleriano; grau de entrada de cada v ertice de e isto e , possui um caminho fechado (circuito) que percorre cada aresta uma u nica vez, sendo que os v ertices podem ser visitados um n umero qualquer de vezes. Esse circuito e denominado Euler Tour de .

Assumimos que a a rvore est a representada pelas listas de suas arestas. Isto e , para cada v ertice , temos uma lista de arestas que conectam a seus vizinhos . Cada aresta aparece duas vezes na estrutura, uma vez na lista de e outra na lista de . Cada aresta possui um ponteiro para a pr oxima aresta da lista , (esse ponteiro na u ltima aresta e nil) e um ponteiro para sua c opia na lista de . Para o grafo simplesmente interpretamos uma aresta como sendo dirigida de para quando ela aparece na lista de , e de para quando ela aparece na lista de . A aresta dirigida e denominada reversa da aresta . O vetor tem entradas; aresta da lista de arestas incidentes com .
e um ponteiro para a primeira

Uma das formas de organizar a estrutura de dados e a de armazenar todas as arestas em um vetor de tal forma que que todas as arestas originando no v ertice 1 o es de , seguidas das arestas originando no estejam armazenadas nas primeiras posic v ertice 2 e assim sucessivamente. Essa estrutura de dados pode ser facilmente constru da atrav es de ordenac o es do conjunto de arestas. Dado as listas de adjac encias, usando um algorimto de ordenac a o, e poss ivel construir a estrutura de dados necess aria para o Algoritmo 14 que computa um Euler Tour para . rvore Algoritmo 14 Euler Tour de uma a umero de processadores; (3) O - esimo Entrada: (1) O n umero de processador ; (2) O n de tamanho , onde o armazena sub-vetor as arestas de . Cada elemento do vetor e composto de tr es campos: (i) ndice da aresta; (ii) ponteiro para a aresta reversa e (iii) ponteiro para a pr oxima aresta; (4) Um onde cada elemento cont em um apontador para o in cio do bloco referente vetor a cada v ertice no vetor . Sa da: Um vetor com entradas representando um Euler Tour de como uma lista ligada. Ou seja, e o ndice da aresta sucessora de no tour.
at e fac a (1) para nil est ao se BEDGE[BEDGE[e].reverso].pr oximo ETourLink[e] BEDGE[BEDGE[e].reverso].pr oximo; ListaAdj[e.y]; caso contr ario ETourLink[e]

Fim do Algoritmo Teorema 6 O Euler Tour de uma a ertices pode ser computado no mod rvore T com n v elo CGM com p processadores e mem oria local por processador usando rodadas de comunicac a a o e com computac o local por rodada. o: Demonstrac a O Algoritmo 14 n ao faz uso da raiz da a rvore. O algoritmo canstr oi um Euler tour para uma a rvore n ao enraizada. Se designarmos uma aresta saindo da raiz, digamos como sendo a primeira aresta do tour, en ao o tour percorre a a rvore enraizada na ordem de uma busca em profundidade. O Algoritmo 14 tem como sa da um Euler tour representado atrav es de uma lista ligada. Para algumas aplicac o es, necessitamos saber a posic a o de cada aresta no tour. ao os Isso pode ser feito com a utilizac a o do algoritmo de list ranking. Os s s

ponteiros para os sucessores no problema do list ranking. Os ponteiros dos predecessores de um n o numa lista podem ser obtidos em tempo contante. O predecessor de e au ltima aresta do tour,e podemos alterar o ponteiro de seu sucessor para apontar para a pr opria raiz, com isso o tour tem a a mesma estrutura da entrada do problema do list ranking. rvore Algoritmo 15 Euler Tour de uma a Entrada: (1) O n umero de processador ; (2) O n umero de processadores; (3) O - esimo sub-vetor de tamanho , onde o armazena e composto de tr es campos: (i) ndice as arestas de . Cada elemento do vetor da aresta; (ii) ponteiro para a aresta reversa e (iii) ponteiro para a pr oxima aresta; (4) Um vetor onde cada elemento cont em um apontador para o in cio do bloco referente . a cada v ertice no vetor Sa da: Um vetor com entradas representando um Euler Tour de como uma e o ndice da aresta sucessora de no tour e um vetor lista ligada. Ou seja, onde e a posic a o de no tour.. (1) Aplicar o Algoritmo 14; (2) O processador que cont em a aresta ETourLink[e] e; (3) Aplicar o algoritmo de list ranking na lista mazenar o resultado em ;

atribui

e ar-

(Os ranks variam de zero para a ultima aresta a 2n-3 para a primeira) (4) Cada processador computa posn[e] suas arestas; Fim do Algoritmo 2n-2-rank[e] para

2. Ancestral Comum mais Baixo


O ancestral comum mais baixo de dois v ertices e de uma a rvore com raiz e o v ertice que e um ancestral de e e que est a mais distante da raiz. LCA . N ao estamos interessados somente no problema de dado um par de v ertices e determinar LCA . O que queremos e um caso mais geral e aplic avel em uma s erie de problemas como descrito em Reif [21]. Estamos interessados em, dada uma e-processar de forma que uma consulta LCA , para a rvore com raiz, pr um par qualquer de v ertices e de , possa ser respondida rapidamente - em tempo sequencial . Para este problema, conhecido como Problema do Ancestral Mais Baixo (LCA Lowest Common Ancestor ), temos dois casos especiais: 1. e simplesmente um caminho. Neste caso, basta determinarmos a dist ancia de cada v ertice a ` raiz, o que nos permite responder a LCA em tempo constante, ` raiz. comparando-se as dist ancias de e a 2. e uma a rvore bin aria completa. Neste caso, dada uma a rvore bin aria completa com raiz, inicialmente determina-se o n umero in-ordem dos v ertices de . O

n umero in-ordem dos v ertices de uma a rvore corresponde a ` ordem dos v ertices obtida em um percurso in-ordem na a rvore a partir da raiz. A partir disto, cada v ertice ser a identicado atrav es do seu n umero in-ordem e convenientemente dado em sua representac a o bin aria. Indexamos os bits na representac a o bin aria do bit menos signicativo, que tem ndice , para o mais signicativo, que tem ndice . Dados dois v ertices e da a rvore , seja a posic a o do bit mais a ` esquerda em que e diferem. LCA consiste dos bits mais a ` esquerda, seguidos os a determinac a o dos n umeros in-ordem, podemos por um 1e 0s. Assim, ap responder a consultas LCA em tempo . Quando a a rvore e arbitr aria, a soluc a o para o problema n ao e imediata. Existem diversos algoritmos, sequenciais e paralelos, que pr e-processam a a rvore de entrada para consultas LCA. Na sec a o seguinte descreveremos uma das poss veis soluc o es, utilizando o modelo CGM. Os algoritmos CGM obtidos para este problema s ao baseados em algoritmos desenvolvidos para o modelo PRAM. Uma estrat egia b asica descrita em [21], para o modelo PRAM e que tamb em e sequencialmente eciente, consiste no mapeamento da a rvore de entrada em uma a rvore bin aria de altura logar tmica. Entretanto, vamos nos basear nas id eias desenvolvidas em [15] e que utiliza a t ecnica Euler Tour e o problema de m nimos intervalares. 2.1. O Algoritmo para uma Arvore Arbitr aria
, onde . A a rvore encontra-se Consideraremos uma a rvore com raiz inicialmente distribu da entre os processadores de forma que seus n os est ao aleatoriamente armazenados nas mem orias locais dos processadores com apontadores para os respectivos pais de cada n o na a rvore. Se o pai de determinado n o n ao encontra-se armazenado no mesmo processador, o ndice do processador que o armazena e conhecido. O pai da raiz e ela pr opria.

O primeiro passo do algoritmo consiste em fazer um Euler Tour na a rvore de forma a obter, para cada v ertice, o seu n umero em pr e-ordem. Os v ertices do percurso que foram obtidos estar ao armazenados em um vetor , indexado pela posic a o em que o v ertice aparece no percurso. O vetor estar a distribu do de forma cont gua entre os processadores. Como vimos na sec a o anterior, a obtenc a o de um Euler Tour leva tempo , usando rodadas de comunicac a o. O passo seguinte consiste em determinar , para cada v ertice da a rvore, ndices contendo o n vel do v ertice na a rvore. Determinamos tamb em e , os veis das ocorr encias mais a ` esquerda e mais a ` direita de em , respectivamente. Os n dos v ertices podem ser obtidos, atrav es de somas prexas, em tempo , usando rodadas de comunicac a o. Na Figura 3.1, temos o vetor calculado para a a rvore dada. Considerando o vetor , e a ocorr encia de em mais a ` esquerda se e e a ocorr encia de somente se . De forma semelhante, em mais a ` direita se e somente se . Por conseguinte, e podem ser obtidos em tempo e, possivelmente, uma rodada de comunicac a o 1,
1 Se o vetor , distribu do contiguamente entre os processadores, contiver tamb em as posic o es anterior e posterior ao subvetor localmente armazenado, n ao ser a necess aria nenhuma rodada de comunicac a o para determinar os vetores e .

2 8

4 3 10 11

A={1,2,3,2,4,5,4,6,4,7,4,2,1,8,1,9,10,9,11,9,1} B={0,1,2,1,2,3,2,3,2,3,2,1,0,1,0,1,2,1,2,1,0} nivel={0,1,2,2,3,3,3,1,1,2,2} esq={1,2,3,5,6,8,10,14,16,17,19} dir={21,12,3,11,6,8,10,14,20,17,19}


Figura 3.1: Uma arvore dada e os vetores arvore. , ,

, e obtidos para a

uma vez que o vetor de n veis encontrar-se- a distribu do contiguamente entre os processadores.
. O problema LCA, ent ao, ser a reduzido ao processamento do vetor Este vetor cont em, em cada posic a o, o valor do n vel na a rvore do respectivo v ertice e e obtido em tempo , usando 1 rodada de comunicac a o. A justicativa para esta reduc a o e dada pelo lema a seguir.

Lema 5 Dada uma a rvore com raiz . Sejam , , , , para cada , como denido. Sejam e dois v ertices quaisquer de , . Enta o as seguintes armac o ao v alidas. es s . 1. e ancestral de se e somente se ao est ao relacionados, isto e ao e ao e 2. e n , n ancestral de e n ancestral de , se e somente se ou ou . 3. Se , ent ao e ertice com n vel m nimo dentre aqueles o v no intervalo . o: Armac Demonstrac a a o 1. Vamos supor que seja ancestral de . Como o Euler Tour rvore a partir da raiz, e visitado em corresponde a uma busca em profundidade na a em disso, a sub arvore com raiz em e totalmente visitada antes da u ltima antes de e, al ocorr encia de . Da , temos que . Reciprocamente, vamos e que n ao seja ancestral de . Como supor que arvore com raiz em e completamente visitada antes de ser visitado pela , a sub o que contradiz a hip otese. Portanto, deve ser primeira vez. Mas ent ao ancestral de .

A Armac a o 2 tem demonstrac a o similar.


. Pode-se ver facilmente que todos os Armac a o 3. Vamos supor que v ertices cujos n veis aparecem no intervalo ou fazem parte do caminho entre e , ou s ao seus descendentes, o que inclui tamb em o pois este estar a ertice de n vel m nimo deve ser o LCA de e . no caminho entre e . Portanto, o v

Dessa forma, vemos que, para determinar o , precisamos pr e-processar o vetor de forma que possamos responder, em tempo constante, a consultas de m nimo intervalar. A soluc a o para este problema ser a discutida na pr oxima sec a o e, como verea o. mos, o pr e-processamento levar a tempo , usando rodadas de comunicac Com a descric a o apresentada, podemos observar que o tempo do algoritmo para o a o. problema LCA e , usando rodadas de comunicac
procedemos da forma descrita Na Figura 3.1 se quisermos determinar a seguir. Como estes v ertices n ao est ao relacionados, o LCA ser a o v ertice de menor n vel no intervalo . Temos que, e . O m nimo intervalar entre as posic o es 3 e 10, no vetor , vale 1 e corresponde ao v ertice 2 em , que e justamente o valor do LCA.

3. Minimo Intervalar
Dado um vetor umeros reais, denimos de n . O problema de m nimo intervalar (range minima ) consiste em pr eprocessar o vetor de forma que consultas possam ser respondidas em tempo . constante, para todo

O algoritmo para o problema de m nimo intervalar no modelo CGM, descrito em [19] usa os algoritmos seq uenciais de Gabow et al [10] e Alon e Schieber [2] que s ao executados usando os dados locais em cada processador. 3.1. Algoritmo Sequencial de Gabow et al Este algoritmo usa a estrutura de dados a rvore Cartesiana descrita a seguir e nela e aplicado um algoritmo para o problema do LCA. u-meros reais distintos, a a rvore Dado um vetor de n Cartesiana de e uma a rvore bin aria com n os rotulados com os elementos do vetor . A raiz da a rvore tem r otulo arvore esquerda . Sua sub e aa rvore Cartesiana de , e sua a rvore direita e aa rvore rvore Cartesiana de um vetor vazio e a Cartesiana de . A a a rvore vazia. O algoritmo e dado a seguir. Algoritmo 16 M nimo Intervalar(Gabow et al) umeros reais. Entrada: o vetor de n Sa da: uma estrutura de dados que responde a consultas (1) Construir a a rvore Cartesiana de .

em tempo constante.

(2) Usar um algoritmo sequencial linear para o problema LCA, usando a a rvore Cartesiana. Fim do Algoritmo A construc a o da a rvore Cartesiana leva tempo linear, bem como o algoritmo para o problema do LCA. O algoritmo leva, ent ao, tempo linear para obter a estrutura que responde a consultas de M nimo Intervalar em tempo constante. Qualquer consulta pode ser respondida da seguinte forma: da denic a o recursiva de a rvore Cartesiana temos que o valor de e o valor do LCA de e . Assim, cada consulta de m nimo intervalar pode ser respondida em tempo constante atrav es de uma consulta de LCA em uma a rvore Cartesiana. Logo, o problema de m nimo intervalar e solucionado em tempo constante. 3.2. Algoritmo Sequencial de Alon e Schieber O algoritmo de Alon e Schieber tem complexidade de tempo . Apesar desta complexidade n ao-linear, este algoritmo e crucial na descric a o do algoritmo CGM, como ser a visto na sec a o 3.3.. Sem perda de generalidade, vamos considerar como sendo uma pot encia de 2. Na descric a o deste algoritmo, utilizamos o conceito de vetores m nimo prexo e m nimo suxo, vistos na sec a o ??. Algoritmo 17 M nimo Intervalar(Alon e Schieber) Entrada: o vetor umeros reais. de n Sa da: uma estrutura de dados que responde a consultas stante. (1) Construir uma a rvore bin aria completa com folhas. (2) Associar os elementos de a ` s folhas de . (3) Para cada n o de , calcular e , os vetores de m nimo prexo e m nimo suxo, respectivamente, das folhas da sub arvore com raiz . Fim do Algoritmo Aa rvore constru da pelo algoritmo M nimo Intervalar(Alon e Schieber) ser a a ilustrada uma a rvore- gerada por este denominada a rvore- . Na Figura 3.2 est algoritmo. Vamos introduzir a seguinte notac a o: Considere uma a rvore bin aria completa e um n o da a rvore. Denotemos as folhas abaixo de que s ao descendentes , denimos . de . Para cada tal que O processamento das consultas com e feito como se em . Sejam e os lhos esquerdo e direito de segue. Determinamos LCA , respectivamente. Ent ao o valor de e o m nimo entre o valor de e o valor de . uma a rvore bin aria completa e, como vimos, consultas LCA em Aa rvore- e a rvores bin arias completas podem ser feitas em tempo constante.

em tempo con-

P S P S
10 3 3 3 2 2 2 2 2 2 2 2 2 7 7 15

10 3 3 3 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 4 4 5 5 5 5

0 0 0 0 0 0 0 0 0 1 4 4 5 5 5 5

P S P S P S
10 10 10 3 3 3

10 3 3 3 3 3 8 8

2 2 2 2 2 7 7 15

0 0 0 0 0 1 4 4

6 6 6 5 5 5 5 5

11 8 8 8

2 2 2 9

7 7 7 15

0 0 0 1

14 4 4 4

6 6 6 13

12 5 5 5

3 3

11 11

8 8

2 2

9 9

7 7

15 15

0 0

1 1

14 14

4 4

6 6

13 13

12 12

5 5

10

11

15

14

13

12

Figura 3.2: arvore gerada pelo Algoritmo Minimo Intervalar(Alon e Schieber) para um vetor particular.

3.3. O Algoritmo CGM Em um algoritmo CGM, estamos interessados em reduzir o n umero de rodadas de comunicac a o e concentrar na computac a o de dados locais nos processadores. Baseado nos algoritmos sequenciais vistos nas sec o es anteriores, podemos construir um algoritmo CGM para o problema de m nimo intervalar. O algoritmo CGM de Mongelli e Song [19] e executado em tempo e a o e utiliza os algoritmos sequenciais vistos. A maior usa rodadas de comunicac diculdade e no armazenamento dos dados necess arios pelos processadores de forma que as consultas possam ser feitas em tempo constante sem violar o limite de de mem oria xada pelo modelo CGM.
precisa de um m nimo de de mem oria em cada O modelo processador. Infelizmente, n ao h a o que fazer se esta quantidade de mem oria dispon vel for menor que este m nimo. Primeiro, precisamos de mem oria suciente para armazenar os dados de entrada. Tamb em precisamos de mem oria para construir as estruturas de dados em cada processador de forma a obter tempo constante nas consultas do m nimo intervalar.

Na seguinte

descric a o notac a o: , escrevemos .

do Dado ,

algoritmo, um vetor , e

consideraremos

a
,

A id eia do algoritmo e baseada em como as consultas podem ser re . Sem perda de spondidas. Consideraremos processadores denotados por generalidade, assumimos como sendo um pot encia de 2. Cada processador armazena posic o es cont guas do vetor de entrada. Assim, dado , o pro , para . cessador armazena o subvetor

e respondido dependendo da localizac a o de os seguintes casos:

nos processadores. Temos

e est ao em um mesmo processador, o dom nio do problema se reduz 1. Se ao subvetor armazenado localmente naquele processador. Assim, precisamos de uma estrutura de dados para responder a este tipo de consulta em tempo constante. Esta estrutura de dados e fornecida em cada processador pelo Algoritmo M nimo Intervalar(Gabow et al). e est ao em processadores distintos e (sem perda de generalidade, 2. Se ), respectivamente, temos dois subcasos: (a) Se , isto e , e est ao em processadores vizinhos, ent ao corresponde ao m nimo entre o m nimo de at e o nal do subvetor e o m nimo do comec o do subvetor at e . Estes m nimos podem ser novamente determinados pela estrutura de dados obtida pelo Algoritmo M nimo Intervalar(Gabow et al). Para determinar o m nimo destes m nimos, precisamos de uma rodada de comunicac a o. (b) Se

, corresponde ao m nimo do subvetor , o m nimo do subvetor e os m nimos dos nimos s ao determinados subvetores . Os primeiros dois m ao como no subcaso anterior. Os m nimos dos subvetores s facilmente determinados usando a a rvore Cartesiana do vetor de m nimos de todos os subvetores , . Isto se reduz a um problema de m nimo intervalar restrito a um vetor de valores. Assim, precisamos de uma estrutura de dados para responder a estas consultas em tempo constante. Como o vetor de m nimos cont em apenas valores, esta estrutura de dados pode ser obtida pelo Algoritmo M nimo Intervalar(Alon e Schieber).

A diculdade do Caso 2(b) e que n ao podemos construir a a rvore- explicitamente em cada processador como descrito na sec a o 3.2., pois para isto seria necess ario uma mem oria de tamanho , maior do que o xado pelo modelo CGM, que e , com . Para contornar esta diculdade, armazenamos apenas informac o es mos vetores e de parciais na a rvore- em cada processador. Constru posic o es em cada processador, como descrito a seguir.
. Vamos descrever esta construc a o para um processador , com nimo do subvetor . Seja um n o qualquer da a rvore tal que a Seja o valor do m sub arvore com raiz tem como folha, e seja a profundidade de em , isto e , o vel de , que comprimento do caminho da raiz at e , como denido em [1]; e seja o n , e a altura da a rvore menos a profundidade de , como denido em [1] ( pois a a rvore tem altura ). O vetor (respectivamente, ) cont em na posic a o o vel de , na posic a o correspondente a ` valor do vetor (respectivamente, ), do n folha . Em outras palavras, temos .

A Figura 3.3 ilustra a correspond encia entre os vetores e armazenados em da pelo algoritmo M nimo Intervalar(Alon e cada processador e a a rvore- constru Schieber). Na Figura 3.3(b), as posic o es em destaque nos vetores em cada n vel da vel. Desta forma, obtemos o a rvore correspondem ao m nimo suxo de em cada n vetor no processador 0 (Figura 3.3(c)).

10

11

15

12

14

13

10

3 0

11

9 1

15

1 2

14

13 12 3

(a)

P S P S P S
3 3 3 2

3 2 0 0 0 0 0 5

P
0 0

3 3 3 3 2 0

2 2 2 2 2 0

0 0 0 0 0 0

5 0 0 5 5 5

S
2 2 0 5

0
2 2 0 0 5 5

1 (c)

2 (b)

do Algoritmo M Figura 3.3: Execuc ao nimo Intervalar(CGM) usando o vetor (10, 3, 11, 8, 2, 9, 7, 15, 0, 1, 14, 4, 6, 13, 12, 5). (a) Os dados distribu dos nos processadores e as arvores Carte constru das pelo Algoritmo sianas correspondentes. (b) Arvoresnimos M nimo Intervalar(Alon e Schieber) para o vetor de m dos processadores. (c) Vetores e constru dos pelo passo 3 do Algoritmo M nimo Intervalar(CGM) correspondente aos vetores e de .

A seguir, damos uma descric a o em alto n vel do algoritmo. Cada processador o es cont guas do vetor , dividido em subvetores recebe posic . Algoritmo 18 M nimo Intervalar(CGM) Entrada: o vetor umeros reais. com n Sa da: uma estrutura de dados que responde a consultas stante.

em tempo con-

(1) Cada processador executa seq uencialmente o Algoritmo M nimo Intervalar(Gabow et al).
de tamanho , contendo (2) Coment ario: Cada processador constr oi um vetor os m nimos dos subvetores armazenados em cada processador. (2.1) Cada processador calcula . (2.2) Cada processador envia aos outros processadores. o valor recebido do processador , (2.3) Cada processador coloca em .

oi and Constr oi (ver a seguir). (3) Cada processador executa os algoritmos Constr

Fim do Algoritmo Dado um vetor , o seguinte algoritmo constr oi o vetor no processador , para . Este algoritmo constr oi em tempo ( ) usando somente dados locais. A construc a o do vetor e feita de maneira sim etrica, considerando na ordem inversa. Algoritmo 19 Constr oi Entrada: o vetor umeros reais. com n Sa da: o vetor of posic o es. (1)

(2) (3)

(4) para at e fac a (4.1) (4.2) se e mpar ent ao (4.2.1) para at e fac a (4.2.1.1) (4.2.1.2) se ent ao (4.2.1.2.1) Fim do Algoritmo Para simplicar a prova de corretude deste procedimento, consideramos como em as folhas de sendo uma pot encia de 2 e que, em cada processador , o vetor cont nimo Intervalar(Alon e uma a rvore bin aria completa, como na descric a o do Algoritmo M Schieber). N ao armazenamos inteiramente o vetor em cada n o interno desta a rvore, mas o es do vetor de m nimo prexo em cada n vel correspondendo somente as posic a ` posic a o do vetor . o valor do n umero in-ordem da folha O valor da vari avel do passo 3 e os da a rvore. Pode ser visto facilcontendo , obtido em uma travessia in-ordem nos n mente que estes valores, da esquerda para a direita, s ao n umeros mpares no intervalo . Teorema 7 O Procedimento Constr oi corretamente calcula o vetor , para cada pro . cessador , Prova. Para um processador , iterac a o do lac o do passo 4:

, provamos o seguinte invariante em cada

arvore que cont em e tem raiz no n vel . Em cada iterac a o , seja a sub armazena a posic a o do vetor de m nimo prexo do subvetor de correspondente a `s avel cont em o ndice, em , da folha de mais a ` folhas da sub arvore e a vari esquerda. Inicialmente, provamos que o invariante vale antes da primeira iterac a o. Neste caso, , e s ao v alidos, pois a sub arvore e formada apenas a na posic a o de . pela folha que cont em e est

Vamos supor que o invariante seja v alido imediatamente antes do in cio de uma alido no m desta iterac a o. iterac a o e vamos mostrar que permanece v Na iterac a o , seja com raiz . cont em 1. o subvetor de cujos elementos s ao as folhas da sub arvore e est a no n vel .

Analisamos dois casos:


e par. Como estamos considerando a rvores bin arias completas, o valor par de signica que a folha correspondente a est a na sub arvore esquerda de . s ao os mesmos elementos a ` Neste caso, os elementos a ` esquerda de em esquerda de em . Assim, . Al em disso, a folha mais a ` tamb em a folha mais a ` esquerda da a rvore que cont em . esquerda de e ao muda. Assim, o valor da vari avel n oi , o passo 4.1 faz a atualizac a o , No Procedimento Constr e este valor de n ao e alterado at e o nal da iterac a o. O valor da vari avel tamb em n ao muda. Assim, neste caso, o invariante permanece v alido no nal da iterac a o . mpar. 2. e

Neste caso, a folha correspondente a est a na sub arvore direita de raiz . O valor armazenado em corresponde ao m nimo prexo do subvetor do vetor . A vari avel armazena o ndice do vetor , correspondendo a ` , folha mais a ` esquerda da sub arvore cujas folhas s ao os elementos de . Isto e esta vari avel aponta para a primeira posic a o de . O subvetor , considerado na iterac a o , corresponde a ` s folhas da sub arvore . Assim, este subvetor e formado pelas folhas das sub arvore esquerda e direita de . (As folhas da sub arvore direita correspondem aos elementos do subvetor .) Como este novo subvetor apresenta valores a ` esquerda de que n ao estavam envolvidos na determinac a o de , o valor de ser a o m nimo entre e os valores correspondentes a ` s folhas da sub arvore esquerda de . O lac o para do passo 4.2 examina estas posic o es, comparando os valores com (inicialmente igual a ) e atualizando-o quando necess ario. Isto e feito usando a vari avel , que varre estas posic o es, e, ao nal, aponta para a primeira posic a o do vetor . Assim, ao nal desta iterac a o, conter a o valor correto da posic a o do vetor avel conter ao ndice, em , do de m nimo prexo do vetor , e a vari primeiro elemento de que corresponde a ` folha mais a ` esquerda de . Na u ltima iterac a o, e cont em o valor da posic a o do vetor avel cont em o ndice do primeiro elemento de . m nimo prexo de , e a vari

oi corretamente calcula o vetor . Assim, o Procedimento Constr


Para a determinac a o de , temos um teorema e prova similares.

Lema 6 A execuc a oi em cada processador leva tempo o do Procedimento Constr seq uencial .

Prova. O n umero m aximo de iterac o es e . Em cada iterac a o, o valor de e . Neste caso, em decrementado ou permanece o mesmo. O pior caso e quando atualizado. Como o n umero de elementos de cada iterac a o, o valor da vari avel e e , o algoritmo atualiza o valor de no m aximo vezes. Assim, o Procedimento Constr oi e executado em tempo seq uencial . O teorema a seguir resume os resultados obtidos.

Teorema 8 O algoritmo M nimo Intervalar(CGM) resolve o problema de m nimo intervalar em tempo usando rodadas de comunicac a oria . o e mem ao necessita de Prova. O passo 1 e executado em tempo seq uencial , n executado em tempo seq uencial comunicac a o e utiliza mem oria . O passo 2 e , utiliza espac o e necessita de uma rodada de comunicac a o onde e enviado um valor e s ao recebidos dados. Pelo teorema 6, o passo 3 e executado em temao precisa de comunicac a o e utiliza mem oria . Portanto, o po seq uencial , n Algoritmo M nimo Intervalar(CGM) resolve o problema de m nimo intervalar em tempo seq uencial , usando rodadas de comunicac a o, onde s ao trocados no m aximo dados e utilizando mem oria local .

3.4. Processamento de Consultas

nimo Intervalar(CGM) Nesta sec a o, mostraremos como usar a sa da do Algoritmo M para responder a consultas em tempo constante. Uma consulta e deterao conhecidos por todos os processadores minada como se segue. Assumimos que e s e o resultado ser a dado pelo processador 0. Se e est ao no mesmo processador, ent ao pode ser determinado pelo passo 1 do Algoritmo M nimo Intervalar(CGM). est ao em processadores distintos e , respectivaCaso contr ario, suponha que e mente, com . Seja , o ndice em do elemento mais a ` direita no vetor , ` esquerda no vetor . Calculamos e o elemento mais a e , usando o passo 1. Temos, ent ao, dois casos:
1. Se ent ao . 2. Se , ent ao calculamos , usando o passo 3 do algoritmo. Notemos que corresponde a As . sim, . obtido usando o passo 3, O valor de e LCA em tempo concomo descrito a seguir. Cada processador calcula stante, ent ao determina o n vel e determina e , os lhos esquerdo e direito de , respectivamente. O processador calcula e envia este valor para o processador 0. O processador calcula e envia este valor para o processador 0. O processador 0, nalmente, calcula o m nimo entre os m nimos recebidos. Em ambos os casos, o processador 0 recebe os m nimos dos processadores e .

nimo Intervalar(CGM) reNotemos, nalmente, que a corretude do algoritmo M sulta das observac o es apresentadas nesta sec a o.

Ap endice A MPI
o 1. Introduc a
O MPI n ao e uma nova linguagem de programac a o, e uma colec a o de func o es ou macros, ou seja uma biblioteca que pode ser usada em programas C, C++ ou Fortran. O LAM e um deamon baseado na implementac a o MPI. Inicialmente o programa lamboot distribui os deamons da LAM baseado numa lista de m aquinas fornecida pelo usu ario. Esses deamons permanecem inativos na lista de m aquinas remotas at e que eles recebam uma mensagem para carrregar o execut avel do MPI para iniciar a execuc a o. S o podemos executar programas MPI enquanto os deamons estiverem atuando em background.

2. Programando com MPI


Os programas que utilizaremos neste texto ser ao do modelo SPMD. Neste modelo, cada processo roda o mesmo programa execut avel. Contudo, os processos executam diferentes instruc o es na medida em que seguem diferentes ramicac o es do programa: as ramicac o es s ao determinadas pelo n umero do processo. Todo programa MPI deve incluir a diretiva de pr e-processador #include <mpi.h> Isto inclui as declarac o es e denic o es necess arias para compilar um programa MPI. O MPI utiliza um esquema consistente para os identicadores denidos para o MPI. Todos identicadores iniciam com os caracteres MPI . Os caracteres restantes da maior parte das constantes MPI s ao letras mai usculas. O primeiro caracter do restante do nome de cada func a o MPI e uma letra mai uscula seguida por letras min usculas (p.e., MPI Init). 2.1. O Mundo do MPI As tarefas s ao representadas por um rank (inteiro) e os ranks s ao numerados de . O comunicador MPI COMM WORLD signica todas as tarefas na aplicac a o MPI e providencia a informac a o necess aria para efetuar troca de mensagens.

2.2. Iniciando e Terminando o MPI Antes que qualquer outra func a o do MPI seja utilizada, nosso programa deve ter uma chamada para MPI Init(&argc, &argv);. A nalizac a o de um programa MPI possui uma chamada para a func a o MPI Finalize();. o das Tarefas 2.3. Identicac a Tipicamente, uma tarefa em uma aplicac a o paralela necessita saber quem ele e (seu rank) e quantas outras tarefas existem. Uma tarefa encontra seu pr oprio rank chamando a func a o MPI Comm rank(): int meurank; MPI Comm rank(MPI COMM WORLD, &meurank); O n umero total de tarefas e retornado pela func a o MPI Comm size(): int nprocs; MPI Comm size(MPI COMM WORLD, &nprocs); 2.4. Enviando Mensagens Uma mensagem e um vetor de elementos de um determinado tipo de dados. O MPI trabalha com todos os tipos de dados b asicos e permite a construc a o de tipos de dados mais elaborados. Uma mensagem e enviada para uma tarefa espec ca e e marcada com uma tag (valor inteiro) especicado pelo usu ario. As Tags s ao utilisadas para distinguir entre diferentes tipos de mensagens que uma tarefa pode enviar ou receber. MPI Send(buffer, count, datatype, destination, tag, MPI COMM WORLD); 2.5. Recebendo Mensagens Uma tarefa recebendo uma mensagem especica a tag e o rank do processo que est a enviando. As tags gen ericas MPI ANY TAG e MPI ANY SOURCE podem ser utilizadas opcionalmente para receber uma mensagem de qualquer tag e de qualquer tarefa que esteja enviando. MPI Recv(buffer, maxcount, datatype, source, tag, MPI COMM WORLD, &status); Informac a o a respeito da mensagem recebida e fornecida pela vari avel status.

es 3. Observac o
Devido a limitac a o de espac o, exemplos de programas MPI e detalhes de instalac a o e utilizac a o do MPI ser ao fornecidas durante o curso. Mais detalhes podem ser encontrados em Group et al [14], Snir et al [22] e Pacheco [20]

Ap endice B PVM (Parallel Virtual Machine)


o 1. Introduc a
O PVM e um conjunto integrado de ferramentas de software e bibliotecas que permite que uma rede de computadores heterog eneos possa ser utilizada para a realizac a o de computac a o paralela ou concorrente. Essas m aquinas formar ao uma u nica m aquina virtual. Uma m aquina virtual pode ser composta de estac o es de trabalho, (ou servidores) de v arios tipos e em lugares f sicos diferentes. O PVM e independente de uma linguagem particular. Ele foi escrito em C e as aplicac o es para o PVM podem ser compostas por um n umero qualquer de processos distintos, escritos em uma mistura de C, C++ e Fortran. Bibliotecas para essas linguagens s ao inclu das na distribuic a o. O PVM tamb em permite o uso de outras linguagens, como o Lisp. O modelo de computac a o do PVM e baseado na id eia de que uma aplicac a o consiste de v arias tarefas. Cada tarefa e respons avel por uma parte do problema. O PVM suporta tanto o paralelismo funcional quanto o paralelismo de dados. O PVM vers ao 3.4 e instalado no diret orio $PVM ROOT do sistema. Quando a os rede faz uso de um sistema nfs, temmos que PVM ROOT=/usr/local/pvm3. Ap instalar o PVM, o programador deve providenciar que o compilador encontre os arquivos que est ao em $PVM ROOT/include e em $PVM ROOT/lib tais como pvm3.h e libpvm3.a. Para se executar um programa que utilize o PVM, o usu ario necessita construira m aquina paralela virtual sobre a qual este programa vai executar. O sistema tem portabilidade para v arias arquiteturas, incluindo estac o es de trabalho, multiprocessadore e supercomputadores. A plataforma mais utilizada para o PVM e o UNIX. Podemos criar uma m aquina paralela interativamente via console. Por exemplo, para obter uma console PVM, faz-se: $ pvm pvm> O comando pvm inicia um processo de controle PVM em background (o daemon quina paralela PVM) na estac a o de trabalho onde a console foi inicializada. Uma ma este daemon virtual e composta de processadores executando o daemon pvmd do PVM. E que gerencia toda comunicac a o entre os processos, bem como a criac a o e nalizac a o

destes processos. Pela console, o programador poder a criar, modicar ou desativar uma m aquina paralela virtual, bem como executar programas PVM e naliza-los, por exemplo, em caso seja necess ario. A console PVM e uma esp ecie de shell que aceita um conjunto denido de comandos. Ao utilizar o PVM, os processadores s ao identicados por um nome ou por um n umero. O comando add da console inclui uma estac o es de trabalho na m aquina virtual paralela. Para adicionar uma estac o es de trabalho, a partir da console, temos o comonado: ao de trabalho pvm> add nome da estac Pode-se adicionar um n umero indenido de estac o es de trabalhos, desde que a mesma tenha PVM instalado (ou que o nfs compratilhe) e que o programador tenha a devida autorizac a o para utilizar a m aquina a ser adicionada. Para vericar a congurac a o da m aquina virtual paralela corrente, utilizamos o comando conf: pvm> conf A remoc a o de estac o es de trabalhos da m aquina virtual e feita atrav es do comando delete. o de trabalho a pvm> delete nome da estac Para nalizar a console, dois comandos podem ser utilizados: halt que encerra a m aquina virtual paralela corrente e o quit que naliza a console e mant em a m aquina virtual: os daemons ativos continuam sendo executados e programas que utilizam o PVM podem ser executado. Se, por acaso, um programa que utilize o PVM car sem ac a o, o comando reset pode ser utilizado para reinicializar a m aquina virtual paralela, desativando todos os processos criados. O PVM possui as seguintes caracter sticasDentro de suas caracter sticas:

Congurac a o das estac o es de trabalho pelo usu ario: as tarefas de aplicac a o computacional executam em um conjunto de m aquinas que s ao selecionadas pelo usu ario para um dado programa PVM. M aquinas com apenas um processador ou com v arios processadores poder ao fazer parte desse conjunto. Acesso transparente com relac a o ao hardware: os programas aplicativos podem ter uma vis ao do ambiente do hardware como colec o es de elementos sem atributos, ou podem explorar as capacidades espec cas de uma m aquina no conjunto de estac o es de trabalhos, simplesmente selecionando quais tarefas ser ao executadas em determinada estac a o de trabalho. Computac a o baseada em processos: a unidade de paralelismo em PVM e chamada de tarefa (task), uma sequ encia independente de threads de controle, que alternam entre computac a o e comunicac a o. Uma thread e uma unidade b asica de utilizac a o da CPU, composta de um valor para os registradores da CPU e uma a rea de mem oria para pilha. Uma thread compartilha com suas threads irm asa sec a o de c odigo e de dados na mem oria e, recursos do sistema operacional. O conjunto das threads irm as formam uma tarefa. Modelo expl cito de troca de mensagens: colec o es de tarefas computacionais, cada uma executando uma parte da aplicac a o usando decomposic a o de dados, funcional ou h brida, cooperando atrav es do envio e recebimento de mensagens ex-

plicitamente. Suporte a ` heterogeneidade: o PVM suporta heterogeneidade em termos de m aquinas, redes e aplicac o es. Como considerac o es acerca de troca de mensagens, o PVM permite que mensagens contenham mais que um tipo de dado para ser trocado entre m aquinas que possuem diferentes representac o es de dados.

2. O arquivo Makele.aimk
O PVM prov e um make independente, chamado aimk, que automaticamente direciona arias os arquivos execut aveis para o diret orio $PVM ARCH e adiciona as bibliotecas necess a ` aplicac a o. O utilit ario make determina quais pec as de um projeto precisam ser recompiladas. Basicamente um makefile simples consiste de regras com a seguinte forma: target : comando dependencias

target e usualmente o nome de um arquivo que e gerado pelo programa, como por exemplo, o arquivo execut avel ou arquivos objeto. dependencia e o arquivo que e usado para criac a o do target. Exemplo: arquivo.cpp. comando e uma ac a o que o make executa. Uma regra pode ter mais que um comando, cada um em uma linha. Uma regra explica como e quando ser a compilado o arquivo. Make executa os comandos sobre as depend encias, para criar ou atualizar o target.

3. Troca de Mensagens no PVM


O envio de uma mensagem no PVM e composta de tr es passos: 1. Um buffer de envio deve ser inicializado com uma chamada a ` func a o pvm initsend(int encoding) ou pvm mkbuf(int encoding). 2. A mensagem deve ser empacotada dentro desse buffer, usando qualquer n umero e combinac a o das func o es pvm pk*( ). 3. A mensagem completa e enviada para outro processo pela chamada da func a o pvm send(int tid, int msgtag) ou usando o envio m ultiplo atrav es da func a o pvm mcast(int *tids, int ntask, int msgtag). Uma mensagem pode ser recebida pela chamada de func o es de recebimento bloqueantes ou n ao bloqueantes e, ent ao, e efetuado um desempacotamento de cada um dos itens do buffer de recebimento. As func o es de recebimento podem ser direcionadas para aceitar qualquer mensagem; ou qualquer mensagem de uma fonte espec ca; ou qualquer mensagem com um tag de mensagem espec ca; ou somente mensagens com um dado tag de mensagem de uma dada origem (pvm recv(int tid, int msgtag), pvm nrecv(int tid, int msgtag), pvm trecv(int tid, int msgtag, struct timeval *tmount).

# Makefile.aimk para programas PVM SDIR = $(HOME)/programs XDIR = $(SDIR)/$(PVM ARCH)/bin INCLUDE DIR= /usr/include LIB DIR= /usr/lib cc = gcc CC = g++ OPTIONS = -g -bnoquiet PVMIDIR = ($PVM ROOT)/include PVMLIB = -lpvm3 CFLAGS = $(OPTIONS) -I$(INCLUDE DIR) -I$(PVMIDIR) $(ARCHCFLAGS) LIBS = $(PVMLIB) $(ARCHLIB) GLIBS = -lgpvm3 LFLAGS = -L$(LIB DIR) -L$(PVM ROOT)/lib/$(PVM ARCH) hello: $(SDIR)/hello.c $(XDIR) $(cc) $(CFLAGS) -o hello $(SDIR)/hello.c $(LFLAGS) $(LIBS) $(GLIBS) mv hello $(XDIR) hello 1: $(SDIR)/hello 1.c $(XDIR) $(CC) $(CFLAGS) -o hello 1 $(SDIR)/hello 1.c $(LFLAGS) $(LIBS) $(GLIBS) mv hello 1 $(XDIR)
Figura B.1: Exemplo do arquivo Makele.aimk

3.1. Buffers de mensagens Se o usu ario est a usando somente um u nico buffer de envio (e esse e o caso mais t pico), ent ao pvm initsend( ) e au nica func a o necess aria. Ela e chamada antes do empacotamento de uma nova mensagem dentro do buffer. A fuinc a o pvm initsend( ) esvazia o buffer de envio e cria um novo para empacotar a nova mensagem. Outras func o es somente s ao necess arias, se o usu ario deseja gerenciar m ultiplos buffers de mensagens na sua aplicac a o. No PVM h a sempre um buffer de envio ativo e um buffer de recebimento ativo por processo, em qualquer momento. O desenvolvedor pode criar um n umero qualquer de buffers de mensagens e escolher entre eles para o empacotamento e o envio de dados. O empacotamento, envio, recebimento e desempacotamento afetam apenas o buffer de mensagens ativo. 3.2. Empacotando dados As v arias rotinas dispon veis no PVM empacotam um ponteiro para um tipo de dados dentro do buffer de envio ativo. Elas podem ser chamadas v arias vezes para empacotar dados dentro de uma mensagem simples. Assim, uma mensagem pode conter v arios

ponteiros, cada um com um tipo de dado diferente. Estruturas em C podem ser passadas pelo empacotamento individual de elementos. N ao h a limites para a complexidade dos pacotes de mensagens, mas uma aplicac a o dever a desempacotar as mensagens exatamente como foram empacotadas. Exemplo de algumas func o es: pvm pkbyte(char *cp, int cnt, int std), pvm pkdouble(double *dp, int cnt, int std), pvm pkfloat(float *fp, int cnt, int std), pvm pkint(int *np, int cnt, int std), pvm pkstr(char *cp). 3.3. Enviando e recebendo dados As func o es pvm send(int tid, int msgtag) e pvm mcast(int *tids, int ntask, int msgtag), usadas para o envio de mensagens, possuem como par ametros a identicac a o do processo que vai receber a mensagem - tid - e um identicador - msgtag - para a mensagem a ser enviada. A func a o pvm send( ) nomeia a mensagem com o identicador msgtag e a envia imediatamente para o processo de identicac a o tid. A func a o pvm mcast( ) nomeia a mensagem com o identicador inteiro msgtag e envia a mensagem para todas as tarefas especicadas no vetor de inteiros tids, exceto para ela mesma. Como vimos anteriormente, o PVM cont em v arios m etodos para recebimento de mensagens de uma tarefa. A func a o mais usada e pvm recv(int tid, int msgtag), que espera ( e bloqueante) enquanto uma mensagem com o nome msgtag venha do processo identicado por tid. Ent ao, coloca a mensagem no buffer de recebimento ativo que foi criado. O PVM tamb em suporta uma vers ao de recebimento com timeout. Considere o caso onde a mensagem nunca chegar a (por causa de um erro ou falha); a rotina pvm recv( ) car a bloqueada para sempre. Para tratar esses casos, o usu ario pode projetar o seu programa de tal forma que ap os esperar por determinado per odo de tempo, a recebimento da mensagem seja suspenso. A func a o pvm trecv(int tid, int msgtag, struct timeval *tmout) permite ao usu ario especicar um per odo a como de tempo. Se o per odo de tempo for muito grande, pvm trecv( ) funcionar pvm recv( ). Se o per odo de tempo for igual a zero, pvm trecv( ) funcionar a a func a o de recebimento n ao como o pvm nrecv(int tid, int msgtag), que e bloqueante. 3.4. Desempacotando dados As func o es para desempacotamento de dados presentes no PVM agem sobre os dados do buffer de recebimento ativo. Na aplicac a o do usu ario essas func o es devem corresponder a ` s rotinas usadas no empacotamento. Exemplo de algumas func o es: pvm upkbyte(char *cp, int cnt, int std), pvm upkdouble(double *dp, int cnt, int std), pvm upkfloat(float *fp, int cnt, int std), pvm upkint(int *np, int cnt, int std), pvm pkstr(char *cp).

3.5. Grupos Din amicos de Processos Um grupo din amico de processos pode ser denido como uma estrutura, dentro da qual processos s ao inseridos ou removidos. Um processo PVM pode pertencer a m ultiplos grupos e grupos podem ser modicados dinamicamente em qualquer instante de execuc a o. As func o es de grupos de processos din amicos s ao constru das sobre o n ucleo das rotinas PVM. O PVM n ao executa as func o es de grupos. Essa tarefa e realizada por um servidor de grupo que e automaticamente iniciado quando a primeira func a o de grupo e chamada. Mantendo a losoa PVM, as func o es de grupo s ao designadas para serem muito gerais e transparentes para o usu ario, mesmo em custo e eci encia. Qualquer tarefa PVM pode abandonar ou entrar em qualquer grupo, em qualquer tempo, sem ter que informar a `s outras tarefas do mesmo grupo. Tarefas podem enviar mensagens por difus ao para grupos dos quais a tarefa emissora n ao fac a parte. Qualquer processo, pode chamar a qualquer instante uma rotina de manipulac a o de grupos, exceto as func o es pvm lvgroup(char *group) e pvm barrier(char *group, int count) que s o fazem sentido para processos pertencentes a um determinado grupo. Situac o es an omalas podem ocorrer quando uma tarefa realiza o envio de uma mensagem a todas as tarefas do grupo e ao mesmo tempo uma nova tarefa entra no grupo. Esta nova tarefa pode n ao receber a mensagem. Por outro lado, uma tarefa pode abandonar um grupo durante um envio de mensagem. Uma c opia desta mensagem pode ser despachada sem ter uma tarefa para receb e-la. Exemplos de func o es de grupo: pvm joingroup(char *group), pvm gettid(int *group, int inum), pvm lvgroup(char *group), pvm gsize(char *group).

es do PVM 4. Principais Func o


Apresentamos a seguir, algumas func o es do PVM bastante utilizadas, junto com uma breve descric a o de cada uma: a deixando o pvm exit(void): informa ao pvmd (daemon) local que o processo est PVM. Essa func a o n ao naliza o processo e deve ser chamada p or todas as tarefas, principalmente pelas que n ao foram iniciadas com o pvm spawn(char *task, char **argv, int flag, char *where, int ntask, int *tids). pvm initsend(int encoding): limpa o buffer de envio de mensagens default e especica a codicac a o para as mensagens. pvm mytid(void): retorna a identicac a o de uma tarefa. pvm pkint(int *np, int cnt, int std): empacota e armazena no buffer de mensagem ativo um vetor de inteiros. pvm recv(int tid, int msgtag): recebe uma mensagem (dados) atrav es do buffer. E bloqueante. pvm send(int tid, int msgtag): envia dados pelo buffer de mensagens ativo. pvm spawn(char *task, char **argv, int flag, char *where, int ntask,int *tids): inicia uma ou mais tarefas no PVM, e o n umero de c opias de uma mesma tarefa pode ser maior que um para uma mesma estac a o de trabalho.

pvm upkint(int *np, int cnt, int std): desmpacota e armazena no buffer de recebimento de mensagens ativo um vetor de inteiros.

5. Como o PVM Trabalha


Os objetivos mais importantes do PVM s ao toler ancia a falhas, escalabilidade, heterogeneidade e portabilidade. O PVM e capaz de detectar falhas na rede. Ele n ao recupera automaticamente uma aplicac a o depois de uma falha e interrupc a o de uma estac a o de trabalho, mas prov e primitivas de noticac a o que permitem a ` s aplicac o es de toler ancia a falhas serem reintegradas. A m aquina virtual e recongurada automaticamente. Essa propriedade trabalha simultaneamente com toler ancia a falhas: uma aplicac a o pode precisar adquirir mais recursos para poder continuar sendo executada, se uma determinada estac a o de trabalho falhar. O PVM pode conectar computadores de diferentes tipos em uma u nica sess ao. Ele executa com modicac o es m nimas em qualquer implementac a o do Unix ou um sistema operacional com facilidades compar aveis (multicasting, networkable). 5.1. Classes de arquitetura O PVM atribui um nome para cada tipo de architetura para as m aquinas nas quais est a sendo executado. Isso e feito para distinguir entre m aquinas que possuem execut aveis diferentes, p or causa de diferenc as de hadware ou de sistemas operacionais. Algumas vezes, m aquinas com execut aveis incompat veis usam a mesma representac a o de dados bin arios. 5.2. Modelos de Mensagens O deamons do PVM podem compor e enviar mensagens de tamanhos arbitr arios, contendo diferentes tipos de dados. Os dados podem ser convertidos usando XDR, quando trocados entre estac o es de trabalhos com formatos de dados incompat veis. Mensagens s ao rotuladas (tags) e enviadas com o c odigo denido pelo usu ario e podem ser selecionadas para receber por enderec os fonte ou tags. Quem envia a mensagem n ao espera por uma conrmac a o do receptor, mas continua assim que a mensagem for entregue pela rede e o buffer de mensagem possa ser seguramente apagado ou reutilizado. A ordem das mensagens e preservada; se v arias mensagens forem enviadas, elas ser ao recebidas na mesma ordem. Primitivas de recebimento bloqueantes e n ao bloqueantes s ao fornecidas, ent ao uma tarefa pode esperar por uma mensagem sem, necessariamente, consumir tempo de processador.

es 6. Observac o
Devido a limitac a o de espac o, exemplos de programas PVM e detalhes de instalac a o e utilizac a o do PVM ser ao fornecidas durante o curso. Mais detalhes podem ser encontrados em Geist et al [11].

Refer encias
[1] A. V. Aho, J. E. Hopcroft, and J. D. Ullman. The Design and Analysis of Computer Algorithms. Addison-Wesley Publishing Company, 1975. [2] N. Alon and Schieber. Optimal preprocessing for answering on-line product queries. Technical Report TR 71/87, The Moise and Frida Eskenasy Inst. of Computer Science, Tel Aviv University, 1987. [3] E. N. C aceres, F. Dehne, A. Ferreira, P. Flocchini, I. Rieping, A. Roncato, N. Santoro, and S. W. Song. Efcient parallel graph algorithms for coarse grained multicomputers and bsp. In P. Degano, R. Gorrieri, and A. Marchetti-Spaccamela, editors, Proceedings ICALP97 - 24th International Colloquium on Automata, Languages, and Programming, volume 1256 of Lecture Notes in Computer Science, pages 390400. Springer Verlag, 1997. [4] R. Cole. Parallel merge sort. SIAM J. Computing, 17(4):770785, 1988. [5] R. Cole and U. Vishkin. Approximate parallel scheduling, part i: The basic technique with applications to optimal parallel list ranking in logaritmic time. SIAM J. of Computing, 17(1):128142, 1988. [6] F. Dehne, A. Fabri, and C. Kenyon. Scalable and architecture independent parallel geometric algorithms with high probability optimal time. In 6th IEEE Symposium on Parallel and Distributed Processing, pages 586593, 1994. [7] F. Dehne, A. Fabri, and A. Rau-Chaplin. Scalable parallel geometric algorithms for coarse grained multicomputers. In Proc. ACM 9th Annual Computational Geometry, pages 298307, 1993. [8] F. Dehne (Ed.). Coarse grained parallel algorithms. Special Issue of Algorithmica, 24(3/4):173176, 1999. [9] A. Ferreira. Discrete computing with pc clusters: an algorithmc approach. Tutorial, International School on Advanced Algorithmic Techniques for Parallel Computationwith applications, September 1999. [10] H. N. Gabow, J. Bentley, and R. E. Tarjan. Scaling and related techniques for geometry problems. In Proc. Sixteenth Annual ACM Symposium on Theory of Computing, pages 135143. ACM Press, 1984. [11] A. Geist, A. Beguelin, J. Dongarra, W. Jiang, R. Manchek, and V. Sunderman. PVM Parallel Virtual Machine - A Users Guide and Tutorial for Networked Parallel Computing. MIT Press, 1994. [12] M.T. Goodrich. Communication efcient parallel sorting. In ACM Symposium on Theory of Computing (STOC), pages 00, 1996. [13] S. Gotz. Communication-Efcient Parallel Algoritms for Minimum Spanning-Tree Computation. PhD thesis, Universitat-Gesamthochschule Parderborn, 1998. [14] W. Gropp, E. Lusk, and A. Skjellum. Using MPI - Portable Parallel Programming with Message-Passing Interface. The MIT Press, second edition, 1999. [15] J. J aJ a. An Introductionto Parallel Algorithms. Addison Wesley, 1992.

[16] R. M. Karp and V. Ramachandran. Handbook of Theoretical Computer Science, volume A, chapter 17, pages 869941. Elsevier/MIT Press, 1990. [17] I. G. Lassous and J. Gustedt. List ranking on a coarse grained multiprocessor. Technical Report 3640, Institut National de Recherche en Informatique et en Automatique, 1999. [18] I. G. Lassous and J. Gustedt. List ranking on pc clusters. Technical Report 3869, Institut National de Recherche en Informatique et en Automatique, 2000. [19] H. Mongelli and S. W. Song. A range minima paralle algorithm for coarse grained multicomputers. In Jos Rolin at al., editor, IPPS99/Irregular - Sixth International Workshop on Solving Irregularly Structured Problems in Parallel, volume 1586 of Lecture Notes in Computer Science, pages 10751084, San Juan, Puerto Rico, April 1999. Springer Verlag. [20] P. S. Pacheco. Parallel Programming with MPI. Morgan Kaufmann Publishers, Inc, 1997. [21] J. H. Reif, editor. Synthesis of parallel algorithms. Morgan Kaufmann Publishers, 1993. [22] M. Snir, S. Otto, S. Huss-Lederman, D. Walker, and J. Dongarra. MPI - The Complete Reference Volume 1, The MPI Core. The MIT Press, second edition, 1998. [23] S. Song. Communication-efcient parallel algoritms for minimum spanning-tree computation. Tutorial, International School on Advanced Algorithmic Techniques for Parallel Computation with Applications, September 1999. [24] R. E. Tarjan and U. Vishkin. Finding biconnected components and computing tree functions in logarithmic parallel time. SIAM J. Computing, 14(4):862874, 1985. [25] L. Valiant. A bridging model for parallel computation. Communication of the ACM, 33(8):103111, 1990.

Anda mungkin juga menyukai