You are on page 1of 4

ANLISE COMPARATIVA ENTRE AS VERSES SEQUENCIAL E PARALELA DO ALGORITMO QUE RESOLVE O PROBLEMA DAS N-RAINHAS

Renato S. de Souza, Ricardo B. Almeida {rsdsouza.inf, rbalmeida.inf}@ufpel.edu.br


Universidade Federal de Pelotas - UFPel Centro de Desenvolvimento Tecnolgico - CDTec Bacharelado em Cincia da Computao

Pelotas - Brasil

Abstract
Este artigo apresenta uma comparao simples de desenpenho entre dois algoritmos desenvolvidos para solucionar o problema das N-Rainhas. A abordagem proposta foi baseada em implementar um algoritmo sequencial e o outro utilizando threads para verificar o desenpenho de cada um dos algoritmos.

1. Introduo
Nos ltimos anos, os processadores evoluram de uma forma surpreendente, com isso, a explorao e o uso de arquiteturas multicore tem se tornado cada vez mais popular[1]. Portanto este trabalho tem como objetivo demonstrar como importante usar paralelismo no desenvolvimento de software para aproveitar o grande poder de processamento oferecidos pelo hardware. Para isso, foram desenvolvidas duas verses de algoritmos, uma seqencial e outro paralelo, com o objetivo de encontrar todas as combinaes possveis para o problema das N-Rainhas. Foram comparados e analisados os tempos de execuo para cada verso desenvolvida do algoritmo, com o mesmo conjunto de entradas.

2. Metodologia
O problema das N-Rainhas, consiste em como deve ser realizada a distribuio de n rainhas em um tabuleiro de xadrez nxn sem que elas possam se atacar[2]. Duas rainhas atacam-se quando elas esto na mesma linha, coluna ou diagonal do tabuleiro. As duas verses implementadas neste trabalho foram desenvolvidas na linguagem Java. O algoritmo que busca todas as solues possveis o mesmo usado nas duas implementaes. Este algoritmo foi desenvolvido recursivamente e as estruturas utilizadas foram uma matriz para representar o tabuleiro e uma lista para guardar a configurao do tabuleiro em cada nvel da recurso. O algoritmo consiste, inicialmente, em colocar uma rainha na primeira posio vazia da primeira linha do tabuleiro, onde sero marcadas como ocupadas todas as posies que pertencem a mesma linha, mesma coluna e as posies que pertencem as diagonais da posio da rainha. Aps o algoritmo passa para a prxima linha e procura uma posio livre para colocar outra rainha. Caso ele encontre uma posio livre, ele adiciona a rainha nesta posio, marca a linha, a coluna e as diagonais e passa para a prxima linha do tabuleiro. Caso contrrio ele retorna a um nvel anterior da recurso, retira a ltima rainha adicionada e procura uma posio livre na mesma linha, a partir da posio onde ela encontrava-se, para

adicion-la. Este processo feito ate que a ultima recurso volte para sua primeira chamada, onde sabemos que todas as possibilidades foram encontradas. Cada vez que adicionada uma rainha na ultima linha do tabuleiro, significa que foi encontrada uma soluo possvel, ento chamado um mtodo na qual grava a configurao atual do tabuleiro em um arquivo de texto. Ento o algoritmo volta a um nvel anterior para continuar procurando outras solues distintas. Na implementao seqencial este algoritmo executado no modo descrito acima. J na implementao paralela, foi realizado uma mudana que consiste em criar inicialmente uma thread para cada coluna do tabuleiro. Portanto cada thread ir fixar uma rainha na primeira linha na posio referente a sua coluna. Aps, cada thread ir executar o algoritmo sequencialmente at testar todas as suas solues possiveis. Com isso, cada thread ser responsavel por encontrar uma soluo com a primeira rainha no mesmo lugar tendo assim o problema dividido em n partes, na qual este n a quantidade de rainhas. A Fig. 1 ilustra o processo de criao e execuo de cada thread.

Figura 1. Representao da criao e execuo das threads.

A classe que implementa este algoritmo foi extendida a classe Thread, definindo um relao de herana. Com isso a classe pode herdar os metodos na qual criam e executar uma thread. A seco critica est quando duas ou mais threads encontram uma soluo e chamam o metodo para escrever a soluo em um arquivo texto que recebe todas as solues possiveis. Portanto este metodo foi definido como synchronized, onde o

metodo so pode ser executado por apenas uma thread de cada vez. Assim garantimos que cada thread ir escrever sua soluo no arquivo sem que outra thread interfira.

3. Resultados
As tabelas tab.1 e tab.2 informam os resultados de desempenho do algoritmo para as verses paralela e sequencial. Os testes foram executados em um processador Intel Core i3-M350 2.27Ghz. Os tempos indicados na tabela esto em segundos.
Tab. 1 Avaliao de tempo de execuo na verso sequencial.

Medidas de Tempo para verso Sequencial


4 5 6 7 8 9 10 11 12 13 14 15 Tempo Mdio Desvio Padro real 0,217 0,114 0,121 0,151 0,186 0,356 0,516 1,076 4,06 20,275 124,165 852,636 83,65608333 244,7362689 user 0,07 0,09 0,07 0,15 0,24 0,64 1,09 1,58 4,95 20,82 121,3 834,22 82,10166667 239,357219 sys 0,02 0,02 0,04 0,03 0,04 0,04 0,08 0,15 0,19 0,76 4,03 23,37 2,3975 6,701904919

Tab. 2 Avaliao de tempo de execuo na verso paralela.

Medidas de Tempo para verso Paralela


4 5 6 7 8 9 10 11 12 13 14 15 Tempo Mdio Desvio Padro real 0,149 0,108 0,121 0,13 0,191 0,289 0,492 1,089 3,149 13,567 73,16 491,938 48,69858333 141,1293251 user 0,08 0,1 0,09 0,17 0,3 0,6 1,35 2,68 6,99 28,48 160,68 1140,38 111,825 327,1219008 sys 0,02 0 0,02 0,01 0,04 0,07 0,09 0,18 0,51 1,91 8,72 54 5,464166667 15,48521022

Conforme o exposto nas tabelas acima, para cada execuo tem-se trs tempos diferentes. Sendo o primeiro denominado real, o segundo user e o terceiro sys.

real: o tempo de inicio at o fim da execuo. user: a quantidade de tempo de CPU gasto em modo de utilizador (cdigo fora do kernel) dentro do processo. sys: a quantidade de tempo de CPU gasto no kernel dentro do processo. Observando tambm os resultados das tabelas acima, foi possivel aplicar algumas mtricas para medir o desempenho de cada algoritmo. A tabela a seguir ilustra os valores encontrados para o Speedup e Eficincia conforme solicitado na descrio do trabalho.
Tab. 3 Resultados da avaliao de desempenho

Avaliao de Desempenho
Speedup Eficincia real 1,717834023 0,858917012 user 0,734197779 0,36709889 sys 0,438767729 0,219383865

4. Concluso
Neste trabalho foram desenvolvidas duas verses de algoritmo para resolver o problema das N-Rainhas, uma sequencial e outra paralela com o uso da classe threads. Como benchmark foi usado um conjunto de entradas que pertence a um intervalo de 4 at 15 rainhas, que foi executado em um computador com processador Intel Core i3. Realizando as comparaes, possivel verificar que o tempo mdio de execuo da verso paralela aproximadamente a metade em relao sequencial, pois ela explora ao mximo a capacidade de processamento dos dois ncleos disponveis. importante ressaltar que deve se manter um equilbrio entre a quantidade de threads criadas e a arquitetura utilizada, para que no haja uma sobrecarga ao utilizar um grande nmero de threads (trocas de contexto, escalonamento, ), para que no seja introduzidos erros de programao, pois a utilizao de threads torna a depurao mais complexa, ao mesmo tempo que seja aproveitado ao mximo o hardware disponvel. Tambm foi possivel notar que aps a introduo da gravao do arquivo texto com as solues percebeu-se que o processo ficou realizando entrada/sada durante um tempo significante afetando o desempenho do software. Desta forma, podemos concluir que o uso de paralelismo no desemvolvimento de software tras grandes benefcios com, o aumento de desempenho e um melhor apoveitamento da capacidade de processamento oferecida pelo hardware.

5. Referncias
[1] Wikipedia. Parallel computing. Disponvel http://en.wikipedia.org/wiki/Parallel_computing. Acesso em abril de 2011. em

[2] Timothy J. Rolfe. Queens on a Chessboard: Making the Best of a Bad Situation. Disponvel em http://penguin.ewu.edu/~trolfe/SCCS-95/SCCS-95.html. Acesso em abril de 2011.

You might also like