You are on page 1of 14

ˆncias Matema ´ ticas e de Computac ˜o – Instituto de Cie ¸a ˜ o Paulo (USP) Universidade de Sa ˜ o Carlos – SP – Brasil Sa

˜ o Concorrente Programac ¸a SSC-0143

Busca por Pal´ ındromos em Textos Grandes Utilizando OpenMP e MPI

Grupo 10 Jos´ e Eduardo de Melo Colabardini, 6792670 dudu@grad.icmc.usp.br Vitor Muniz Carvalho, 67923031 vtrmc@grad.icmc.usp.br

2012 1 .

3 Sa´ ıda . . . . . . . . . . . . . . . . .3 Crivo de Erat´ ostenes . . . . . . . . . . . . . . . . . . . . . 2 OpenMP 3 MPI 4 Decomposi¸ c˜ ao 4. . . . 1. . . 10 6 Testes 7 Conclus˜ ao Referˆ encias 10 13 13 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 3 4 4 5 5 6 5 Implementa¸ c˜ ao 9 5. . . . . . . . . . . . . . . . . 4. . . .2 Divis˜ ao das tarefas . . .2 Tabela ASCII . . . 1. . . . . . . .1 Divis˜ ao do arquivo . . . . . . .2 Decomposi¸ ca ˜o entre os processadores . . . . . . . . . . . . . . .Sum´ ario 1 Descri¸ c˜ ao do problema 1. . . . . . . . 9 5. . .1 Decomposi¸ ca ˜o entre as m´ aquinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 Pal´ ındromos . . . . . . 9 5. . .

“A torre da derrota” e “Anotaram a data da maratona”. do come¸ co ao fim ou do fim ao come¸ co.2 Tabela ASCII A tabela ASCII ´ e uma tabela de codificamento de caracter baseada no alfabeto inglˆ es. Depois. 3 . deve ser utilizado o Crivo de Erat´ ostenes. • Texto menor: Encontrar ocorrˆ encias de pal´ ındromos por palavras e por frases. ele come¸ ca marcando os m´ ultiplos de 2 como n˜ ao primos at´ e chegar ao N . ele encontra o n´ umero maior que 2 que n˜ ao foi marcado. todos os n´ umero at´ e o limite N s˜ ao marcados como primos. Alguns exemplos de palavras pal´ ındromas: “ovo”. Alguns exemplos de frases pal´ ındromas: “Socorram-me. 1.1 Descri¸ c˜ ao do problema O objetivo desse trabalho ´ e desenvolver um programa paralelo para realizar as seguintes tarefas: • Texto maior: Encontrar ocorrˆ encias de pal´ ındromos por palavras e verificar se a soma dos n´ umeros correspondentes ao mapeamento do c´ odigo ASCII de cada caracter do pal´ ındromo ´ e um n´ umero primo. equanto o caracter ’-’ pelo n´ umero 45. Para o c´ alculo de n´ umeros primos. cada caracter ´ e representado por um n´ umero que varia de 0 at´ e 255. “arara”. 1. Assim. 1.1 Pal´ ındromos Uma palavra ou frase ´ e pal´ ındroma se ela pode ser lida da mesma forma em qualquer uma das duas dire¸ c˜ oes. C´ odigos ASCII representam texto em computadores. “reviver”. o caracter ’a’ ´ e representado pelo n´ umero 97. equipamentos de comunica¸ ca ˜o e outro aparelhos que usam texto. Na pr´ oxima itera¸ c˜ ao. As pontua¸ co ˜es e espa¸ camentos s˜ ao desconsiderados. Ele o faz marcando como n˜ ao primos os n´ umeros m´ ultiplos dos n´ umeros primos. As itera¸ co ˜es √ se repetem at´ e marcar os m´ ultiplos de todos o n´ umeros menores ou iguais a N . subi no onibus em Marrocos”.3 Crivo de Erat´ ostenes O Crivo de Erat´ ostenes ´ e um algoritmo simples e antigo para encontrar n´ umeros primos at´ e um certo limite. Por exemplo. No come¸ co do algoritmo. marcando seus m´ ultiplos como n˜ ao primos at´ e chegar ao N . “salas”. “socos” e “radar”. que ser´ a o 3.

Um bloco de c´ odigo que deve ser executado paralelamente ´ e marcada com uma diretiva do pr´ e-processador (#pragma omp parallel) que criar´ a threads antes do bloco ser executado. Cada thread recebe um identificador que pode e um ser obtido atrav´ es da fun¸ ca ˜o omp get thread num(). MPI (Message Passing Interface) ´ e um protocolo de comunica¸ ca ˜o independente de linguagens usado para programar em computadores paralelos. E 4 . a qual continua a execu¸ ca ˜o at´ e o fim do programa. na capacidade da m´ aquina e outros fatores. escalabilide e portabilidade. cada thread executa o bloco de c´ odigo paralelizado independentemente. 2 OpenMP OpenMP (Open Multi-Processing) ´ e uma API multi-plataforma que suporta programa¸ c˜ ao paralela nas linguagens de programa¸ ca ˜o C/C++ e For´ tran em todas as arquiteturas. 3 MPI Figura 2: Logo do OpenMPI. incluindo as do Unix e do Windows NT. um m´ etodo de paraleliza¸ ca ˜o aonde a thread mestre cria um n´ umero espec´ ıfico de threads escravas para dividir uma tarefa entre eles. ´ suportado cujas metas s˜ ao alta performance. OpenMP ´ e uma implementa¸ ca ˜o de multithreading.Figura 1: Logo do OpenMP. as threads se juntam na thread mestre. Por padr˜ ao. Depois da execu¸ c˜ ao do bloco paralelo. Tanto o paralelismo por tarefas quanto o paralelismo por dados podem ser alcan¸ cados usando OpenMP. Esse identificador ´ n´ umero inteiro e o mestre possui o identificador 0. E um modelo port´ avel e escal´ avel que permite a programadores uma interface simples e flex´ ıvel para desenvolvimento de aplica¸ c˜ oes paralelas em mem´ oria compartilhada. com o ambiente de execu¸ ca ˜o alocandos as threads nos processadores. O ambiente de execu¸ c˜ ao aloca as threads aos processadores dependendo do uso. As threads s˜ ao executadas concorrentemente.

´ e preciso que se utilize ou defina um m´ etodo de comunica¸ c˜ ao compat´ ıvel com o de sua aplica¸ ca ˜o. Ele se tornou um padr˜ ao para comunica¸ ca ˜o entre processos que modelam um programa paralelo sendo executado em um sistema de mem´ oria distribu´ ıda. que utilizam estrat´ egias mistas de bloqueio e n˜ ao bloqueio para a passagem de mensagens: standard. Adiante ser´ a dito como isso foi resolvido. 4 4. o desenvolvedor deve escolher entre quatros modos. ready e buffered. As rotinas de comunica¸ ca ˜o do OpenMPI podem se comportar de duas maneiras: bloqueantes ou n˜ ao-bloqueantes.1 Decomposi¸ c˜ ao Decomposi¸ c˜ ao entre as m´ aquinas Como o programa ser´ a executado em um cluster. synchronous. Al´ em disso. auxiliando o desenvolvimento deste tipo de aplica¸ c˜ ao. Sendo assim. Para cada computador que est´ a executando o programa. MPI Gather. 5 . Fortran e at´ e linguagens como Java ou Python. aonde cada m´ aquina fica respons´ avel por uma fatia do arquivo. O ideal seria fazer uma decomposi¸ ca ˜o de forma que as tarefas executadas em cada m´ aquina seja o mais independente poss´ ıvel das demais. um programa espec´ ıfico que permite a execu¸ ca ˜o do software em v´ arios computadores. Por´ em. Assim. A divis˜ ao ´ e uniformemente entre as m´ aquinas. Como o sistema de arquivos ´ e NFS. todo n´ o escravo ter´ a tamb´ em acesso ao arquivo assim como o n´ o mestre. Para o envio de uma mensagem de um n´ o a outro s˜ ao utilizados as fun¸ co ˜es MPI Send para envio e MPI Recv para recebimento. MPI Bcast. logo deve ser utilizado alguma heur´ ıstica para tratar essas dificuldades utilizando a menor comunica¸ ca ˜o poss´ ıvel.tanto comunica¸ ca ˜o ponto-a-ponto quanto coletiva. tais como: MPI Reduce. al´ em das rotinas de passagem de mensagens. dividindo a carga em cada uma delas. de forma que uma n˜ ao fique mais sobrecarregada que a outra. podendo definir em quais ser˜ ao executados. h´ a outras para comunica¸ c˜ ao coletiva. ´ e atribu´ ıdo um rank. Existe a possibilidade de uma fatia dividir uma palavra ou frase no meio. MPI Barrier. Al´ em dessas fun¸ co ˜es. podemos executar o programa em diversas m´ aquinas. diminuindo a comunica¸ ca ˜o entre elas. O OpenMPI oferece. MPI Allgather e MPI Scatter. Uma das implementa¸ c˜ oes mais utilizadas ´ e o OpenMPI. que pode ser obtido pela fun¸ c˜ ao MPI Comm rank. ´ e poss´ ıvel saber a quantidade de computadores que est˜ ao executando o programa pela fun¸ ca ˜o MPI Comm size. a comunica¸ ca ˜o entre as m´ aquinas ´ e um fator custoso e tem um peso maior na queda de desempenho. Para que a comunica¸ c˜ ao entre os n´ os de cluster seja realizada. optamos por fazer uma decomposi¸ c˜ ao de dados. ao se realizar a comunica¸ ca ˜o. V´ arias implementa¸ co ˜es consistem em um conjunto espec´ ıfico de rotinas que s˜ ao diretamente chamadas por um programa C/C++. como a mem´ oria ´ e distribu´ ıda.

Desta maneira. mas isto faria com que os seeks feitos no disco sejam aleat´ orios. Tamb´ em dever´ a verificar se a soma ASCII de cada palavra pal´ ındroma ´ e um primo. Uma leitura no arquivo feita em blocos de tamanho fixo ´ e mais eficiente do que uma leitura caracter a caracter. Seria mais interessante deixar apenas um processador ler do disco enquanto outros fazem o processamento sobre os dados obtidos. • Procurar por pal´ ındromos nas palavras e/ou frases. podemos dividir o problema em 4 tarefas menores: • Ler blocos de caracteres do arquivo. 4.Cada m´ aquina procurar´ a por pal´ ındromos em apenas uma fatia do arquivo. • Dividir os blocos em palavras e/ou frases. Como dito anteriormente. no caso do texto maior. Figura 3: Decomposi¸ c˜ ao de dados utilizada. • Procurar por soma ASCII prima nos pal´ ındromos. A leitura em disco ´ e uma opera¸ ca ˜o muito custosa e tem um peso grande na an´ alise da decomposi¸ ca ˜o a ser escolhida. poder´ ıamos dividir o arquivo 6 . podemos montar o grafo de dependˆ encia ilustrado pela figura 4. Podemos ver que a tarefa de leitura no disco da itera¸ ca ˜o 2 n˜ ao depende da leitura na itera¸ c˜ ao 1. Com isso.2 Decomposi¸ c˜ ao entre os processadores A tarefa que cada m´ aquina executa ´ e procurar por palavras e/ou frases pal´ ındromos em uma fatia do arquivo. inclusive o n´ o mestre. que ser´ a processado por partes por cada m´ aquina. Vale lembrar que cada uma da tarefa depende da tarefa anterior. A figura 3 ilustra a divis˜ ao do arquivo. Poderia ser utilizado uma decomposi¸ c˜ ao de dados e dividir a fatia do arquivo em fatias menores e deixa a cargo de cada processador da m´ aquina.

cada uma respons´ avel por uma tarefa. s˜ ao feitos v´ arios acessos simultˆ aneos em um u ´nico recurso. Figura 5: Grafo de dependˆ encia utilizando uma decomposi¸ ca ˜o especulativa. Para esse tipo de decomposi¸ c˜ ao alcan¸ car o maior n´ ıvel de paralelismo. Por´ em. essa itera¸ ca ˜o a menos ser´ a irrelevante. ´ e 7 . teremos o pipelining cheio e com m´ aximo desempenho. S˜ ao criadas quatro sess˜ oes. poderia ser feita uma decomposi¸ c˜ ao especulativa. teremos o grafo de dependˆ encia ilustrado pela figura 5. ser´ a feita mais computa¸ ca ˜o desperdi¸ cada do que u ´til.Figura 4: Grafo de dependˆ encia das tarefas. Como podemos observar. Facilmente podemos ver que podemos modelar de forma bem intuitiva esse problema em um pipelining. que consiste em verificar se a palavra ´ e prima antes mesmo de saber se ela ´ e pal´ ındroma. portanto. Seguindo essa ideia. essa decomposi¸ c˜ ao n˜ ao ´ e t˜ ao vantajosa. Outro fato que deve ser observado ´ e que as verifica¸ co ˜es de n´ umeros primos s´ o´ e feita se a palavra for pal´ ındroma. Al´ em disso. A partir da 4o itera¸ ca ˜o. essa decomposi¸ c˜ ao n˜ ao ´ e interessante. em v´ arias fatias e process´ a-las paralelamente nos processadores. Para um n´ umero muito grande de itera¸ co ˜es. a porcentagem de uma palavra aleat´ oria ser um pal´ ındromo ´ e muito baixa e. Portanto. essa decomposi¸ c˜ ao adianta o c´ alculo de n´ umeros primos em uma itera¸ ca ˜o. Aquelas tarefas que dependem de valores ainda n˜ ao calculados s˜ ao atrasadas em uma itera¸ ca ˜o. Desta forma. A op¸ ca ˜o que nos pareceu mais interessante foi realizar a decomposi¸ ca ˜o de controle. ou seja. como o disco ´ e um regi˜ ao cr´ ıtica.

O tempo de cada itera¸ ca ˜o torna-se o tempo da execu¸ c˜ ao da se¸ ca ˜o mais lenta. V´ arias aferi¸ c˜ oes foram feitas para ter uma informa¸ ca ˜o confi´ avel. Figura 7: Grafo de dependˆ encia utilizando uma decomposi¸ c˜ ao de controle otimizada. uma para o parseamento e outra para cuidar das outras tarefas. Na 3 itera¸ ca ˜o em diante. 8 . Desta forma. ao inv´ es de utilizar quatro se¸ c˜ oes. Na 1a itera¸ ca ˜o. Neste caso. no m´ ınimo. A imagem 6 mostram os resultados obtidos. apenas a leitura do disco ´ e feita. Ent˜ ao. Supondo que n˜ ao ´ e poss´ ıvel subdividir as tarefas. poder´ ıamos utilizar apenas duas se¸ c˜ oes. para procurar o melhor desempenho do pipelining. a leitura do disco e a verifica¸ ca ˜o de pal´ ındromos e primos s˜ ao executados sequencialmente. conseguimos obter o maior desempenho poss´ ıvel com o menor n´ umeros de se¸ c˜ oes necess´ arias. foi executado o programa sequencialmente para a entrada “wikipedia. o parseamento da primeira leitura j´ a pode o ser realizado. dado pelo tempo de parseamento. Figura 6: Gr´ afico em barras ilustrando o tempo de execu¸ c˜ ao m´ edio de cada tarefa por itera¸ c˜ ao. teremos o grafo de dependˆ encia ilustrado pela figura 7. Sendo assim.txt” e contado os tempos de cada tarefa. o tempo de cada itera¸ ca ˜o ser´ a. Na 2 itera¸ ca ˜o. j´ a que as outras tarefas o dependem dela.desej´ avel que as tarefas executadas em cada se¸ ca ˜o levem a mesma quantidade de tempo para executar. Isso tamb´ em diminui o overhead causado pela cria¸ ca ˜o de threads e torna o programa mais eficiente em m´ aquinas com menor n´ umero de processadores.

o necess´ ario. que dever´ a pegar a primeira palavra e/ou frase. o sections cria uma barreira impl´ ıcita para sincronismo. Desta forma podemos realizar a decomposi¸ ca ˜o do arquivo entre ´ os n´ os do cluster. Como a divis˜ ao nem sempre ´ e exata. 5. ’ ?’.2 Divis˜ ao das tarefas Para poder dividir as tarefas que dever˜ ao ser executados entre os processadores foi utilizado a biblioteca OpenMP. ’ !’. ela ser´ a ignorada ao verificar por pal´ ındromo e na soma. No caso do texto maior. n˜ ao ser´ a necess´ ario comunica¸ ca ˜o entre as m´ aquinas. no m´ ınimo. E poss´ ıvel obter o rank da m´ aquina corrente. evitando perdas de desempenho. se houver algum espa¸ co ou caracter de pontua¸ c˜ ao em uma frase. uma vez descobertos todos os primos at´ e um 9 . foi utilizado a biblioteca MPI. Aquele que produziu melhores resultados foi 4096 bytes. os bytes restantes ser˜ ao lidos pela m´ aquina de rank mais alto. Para evitar rec´ alculos desnecess´ arios. cada m´ aquina fica mais justa seria tasks bytes para cada m´ length length respons´ avel pelos bytes de rank tasks at´ e (rank + 1) tasks − 1. pela fun¸ c˜ ao MPI Comm rank e a quantidade de m´ aquinas executando o programa. foi adicionado a diretiva #pragma omp parallel sections num threads(2). a divis˜ ao length aquina.’. Desta forma. Para tratar isso. exceto para a primeira. Na verifica¸ ca ˜o de pal´ ındromos e tamb´ em na soma ASCII das palavras e frases. Sendo que o arquivo tem uma quantidade length de bytes. ’\r’ e ’\t’ s˜ ao considerados como separadores. foram considerados apenas n´ umeros e letras. sendo que esta ser´ a capturada pela m´ aquina i − 1. para cada palavra pal´ ındroma encontrada. Para criar as se¸ co ˜es definidas pela decomposi¸ ca ˜o de controle citada acima. ’\n’. Ao final das se¸ co ˜es. ou seja. ´ e verificado se a soma ASCII desta palavra ´ e um n´ umero primo. Essa regra vale para todas as m´ aquinas. Ent˜ ao. que chamaremos de tasks. Para frases. sendo que o rank inicial ´ e 0.1 Implementa¸ c˜ ao Divis˜ ao do arquivo Para executar o mesmo programa em diversas m´ aquinas. pela fun¸ c˜ ao MPI Comm size. Como o disco lˆ e. O c´ odigo de cada se¸ ca ˜o ´ e definido pela diretiva #pragma omp section. utilizamos a heur´ ıstica de que a m´ aquina i sempre ignorar´ a a primeira palavra e/ou frase. seria interessante utilizar blocos de tamanho m´ ultiplo de 512. 8 registros. Ou seja. que chamaremos de rank . somente os caracteres ’. Como dito anteriormente. Para dividir as palavras dentro de um bloco de caracteres.5 5. foi considerado que qualquer caracter que n˜ ao seja alfanum´ erico ´ e um separador. um registro de 512 bytes. limitando o n´ umero de threads a ser criada por dois. Foram feitos v´ arios testes sobre o tamanho do bloco que dever´ a ser lido para cada itera¸ ca ˜o. existe a possibilidade de uma fatia do arquivo incorporar uma frase ou palavra incompleta.

J´ a para os das figuras 9 e 10 utilizando OpenMPI. uma utilizando apenas OpenMP (threads ). Para isso. o modo de comunica¸ c˜ ao utilizado foi standard. parseamento e verifica¸ ca ˜o de pal´ ındromos e de primos). Para o gr´ afico da figura 8. Desta forma. foram criados quatro vers˜ oes do programa. Wikipedia (texto maior) e Shakespeare (texto menor).3 Sa´ ıda Como sa´ ıda do programa. Quando for necess´ ario descobrir se um n´ umero maior que max ´ e primo. cada n´ o escravo envia seus resultados obtidos para o n´ o mestre. colocando a resposta em uma outra vari´ avel no n´ o mestre. melhoramos ainda mais o desempenho.n´ umero m´ aximo max. em ordem de ocorrˆ encia. Vale refor¸ car que esse tempo ´ e somado. uma utilizando apenas OpenMPI (um processo em cada n´ o escravo) e outra utilizando ambos OpenMP e OpenMPI. e esse ser´ a respons´ avel por exibi-los na tela na ordem correta. Para isso. para ambos os casos. • Texto menor: Todas as palavras e frases pal´ ındromas. Para realizar compara¸ c˜ oes entre diversos modos de execu¸ c˜ ao do algoritmo e observar o aumento de performance. A fun¸ ca ˜o MPI Send foi utilizada para o envio dos pal´ ındromos para o n´ o mestre. e utilizando tanto OpenMPI e OpenMP. Os 10 . Sendo assim. 5. ele ser´ a sempre expandido em m´ ultiplos de 5000. em ordem de ocorrˆ encia. uma apenas sequencial. que se sobressaiu nos testes envolvendo tamb´ em os modos synchronous e ready. E exibido tamb´ em a quantidade de palavras pal´ ındromas encontradas. foi utilizado a fun¸ ca ˜o MPI Reduce com a opera¸ ca ˜o MPI SUM. j´ a que o programa ´ e execu´ tado paralelamente nos n´ os. temos para cada caso: • Texto maior: Todas as palavras pal´ ındromas e a indica¸ c˜ ao de quais delas s˜ ao primas ou n˜ ao. foram realizadas dez aferi¸ co ˜es de tempo de execu¸ ca ˜o para os casos sequencial e OpenMP. podendo ser maior do que o tempo de execu¸ c˜ ao de fato. quantas delas s˜ ao primas e a quantidade de frases pal´ ındromas encontradas. 6 Testes Foram realizados testes utilizando dois arquivos. Para evitar que o vetor seja realocado com frequˆ encia. ´ e exibido o tempo somado de cada uma das quantro tarefas (leitura do disco. O n´ o mestre utiliza a fun¸ ca ˜o MPI Recv para recebˆ e-los. o vetor que armazena os valores ´ e expandido e o Crivo ´ e executado at´ e esse novo n´ umero m´ aximo. que realiza a soma das vari´ aveis de tempo de todos os n´ os. n˜ ao ser´ a necess´ ario executar o Crivo de Erat´ ostenes novamente para n´ umeros inferiores a max. foram realizados cinco aferi¸ co ˜es para cada quantidade de n´ os do cluster utilizados. Al´ em disso.

variando a quantidade de n´ os executando o programa. Ela foi escolhida porque os tempos de execu¸ ca ˜o no cluster podem variar consideravelmente devido a in´ umeros fatores como: n´ umero de processos em execu¸ c˜ ao. Figura 9: Tempo total de execu¸ ca ˜o para as vers˜ oes OpenMPI e OpenMPOpenMPI no texto maior. Observamos que a vers˜ ao OpenMPI tem um desempenho melhor para um menor n´ umero de n´ os. que ambas as vers˜ oes sequenciais tanto para o caso do texto maior e do menor se mostraram mais eficientes do que utilizando OpenMP. Isso provalvemente se deve ao fato da concorrˆ encia de acesso ao disco r´ ıgido e ao overhead causado pela cria¸ c˜ ao de threads. pelo gr´ afico da figura 8. No entanto. entre outros. ou seja. podemos desconsiderar os tempos de execu¸ c˜ ao que s˜ ao muito maiores ou muito menores do que as restantes (outliers). percebemos que ambas convergem para 11 . porcentagem de CPU utilizada. Figura 8: Tempo total de execu¸ c˜ ao para as vers˜ oes sequencial e OpenMP nos dois textos. O gr´ afico da figura 9 ilustra os resultados obtidos. Assim.valores utilizados para o gr´ afico foi a mediana dos dados obtidos. Tamb´ em foi comparado as vers˜ oes OpenMPI e OpenMP-OpenMPI juntas para o texto maior. o centro da distribui¸ ca ˜o dos dados. velocidade de comunica¸ c˜ ao entre os n´ os. Analisando as vers˜ oes sequencias e OpenMP. podemos ver.

O melhor tempo de execu¸ ca ˜o ocorreu com a vers˜ ao OpenMP-OpenMPI. . o 770. 95. que a partir da utiliza¸ c˜ ao de trˆ es n´ os do cluster. com o tempo de 313.98 .28 7914.5 up em rela¸ c˜ ao ` a vers˜ ao sequencial foi de 1155 = 4. os gr´ aficos basicamente se sobrep˜ oem. utilizando 13 n´ os. Neste caso. Neste caso.152 milisegundos. foi obtido os resultados ilustrados pela figura 10.152 Abaixo temos mais detalhadamente os tempos de execu¸ c˜ ao de cada m´ odulo dos programas (em milisegundos).9 Analisando o texto menor com as mesmas vers˜ oes e variando o n´ umero de n´ os. Neste caso.62 1555. . Figura 10: Tempo total de execu¸ c˜ ao para as vers˜ oes OpenMPI e OpenMPOpenMPI no texto menor. O melhor tempo de execu¸ ca ˜o ocorreu com a vers˜ ao OpenMP-OpenMPI.um mesmo tempo de execu¸ ca ˜o com o aumento do n´ umero de n´ os no cluster. provavelmente quando a utiliza¸ ca ˜o de apenas OpenMPI se torna desvantajosa e OpenMP se torna atrativo.629 1164.5 64.759 13049.874 speed-up em rela¸ c˜ ao ` a vers˜ ao sequencial foi de 313 = 2.4 79. utilizando-se cinco aferi¸ c˜ oes e uso da mediana: • Wikip´ edia: Modo Sequencial OpenMP OpenMPI (12 n´ os) • Shakespeare: 12 Pal´ ındromo 1810. podemos observar. com o tempo de 1155. obtendo a mesma eficiˆ encia at´ e a utiliza¸ ca ˜o de dez n´ os. utilizando 12 n´ os. o speed5727.55 N´ umeros primos Total 28.807 5727. 46.9 milisegundos. O fato de que a vers˜ ao utilizando OpenMP ter menor eficiˆ encia com poucos n´ os provavelmente se deve ao mesmo fato analisado anteriormente no caso sequencial.

e total ´ e o tempo para finaliza¸ c˜ ao do programa no n´ o mestre.404 67.465 770. a resolu¸ c˜ ao de problemas computacionalmente dif´ ıceis ´ e hoje de extrema importˆ ancia para ciˆ encias como a F´ ısica. o conhecimento adquirido em OpenMP para manipula¸ c˜ ao de threads e de OpenMPI para aplica¸ co ˜es distribu´ ıdas ´ e extremamente importante para o desenvolvimento de aplica¸ co ˜es cr´ ıticas ou que necessitam de um grande desempenho computacional. T. http://asciitable. ind´ ustria de cinema. Introduction to Parallel Computing. Acesso em: maio/2012. Mattson.636 417. v´ ıdeo e televis˜ ao. Anshul Gupta.562 309.874 0. Assim. [5] L. Foi obtido um speed-up razo´ avel para o texto menor (2. 2nd Ed.183 0.489 313.org.OpenMPI: Arquivo Shakespeare (13 n´ os) Wikip´ edia (12 n´ os) Pal´ ındromo 455. s˜ ao somados os tempos de processamento de cada n´ o escravo (se houver).751 N´ umeros primos Total 0. bolsa de valores. 7 Conclus˜ ao A modelagem do problema utilizando decomposi¸ ca ˜o de dados e de controle se mostrou vi´ avel e vantajosa para a divis˜ ao dos trabalhos entre os n´ os do cluster e os processadores de uma mesma m´ aquina (threads). A “Hands-on” Introduction to OpenMP. Qu´ ımica e Biologia e para empreendimentos comerciais relacionados a temas t˜ ao variados quanto a prospec¸ ca ˜o de petr´ oleo. Referˆ encias [1] ASCII Table. http://openmp. Meadows. Vipin Kumar. Acesso em: maio/2012. simula¸ co ˜es mercadol´ ogicas.21 3657.com. http://open-mpi.17 N´ umeros primos Total 0. [3] OpenMP.9 Onde para a obten¸ ca ˜o do tempo do pal´ ındromo e n´ umeros primos ´ e realizado a fun¸ c˜ ao reduce. Addison Wesley.279 175. Al´ em disso. [2] OpenMPI.org.582 803.46) e um excelente para o texto maior (4.org.639 • OpenMP . 13 .839 1155.org. [4] Ananth Grama.. George Karypis. 2003. Acesso em: maio/2012.Modo Sequencial OpenMP OpenMPI (10 n´ os) Pal´ ındromo 217. ou seja.95). sistema financeiro.