SlideShare una empresa de Scribd logo
1 de 4
Descargar para leer sin conexión
An´ lise do problema do caixeiro viajante sobre diferentes
     a
                                    ¸˜
             ambientes de programacao concorrente
             Elvio Vicosa Junior, Jeronimo M. Medina, Rafael Pereira,
                     ¸
                           Gerson Geraldo H. Cavalheiro

                               Departamento de Inform´ tica
                                                       a
                          Universidade Federal de Pelotas (UFPel)
                                   Pelotas – RS – Brasil
 {evicosa ifm, jmadruga.ifm, rpereira.ifm, gerson.cavalheiro}@ufpel.edu.br

    Resumo. O problema do caixeiro viajante e uma aplicacao conhecida por pos-
                                              ´            ¸˜
    suir alto custo computacional. Neste trabalho foi realizado um estudo do de-
    sempenho desta aplicacao em arquiteturas dual-core utilizando diferentes am-
                          ¸˜
    bientes de execucao: Pthreads, Cilk e Athreads. Os resultados de desempenho
                     ¸˜
    indicam ganho de desempenho em todas as vers˜ es concorrentes.
                                                  o

          ¸˜
1. Introducao
               ¸˜
A popularizacao dos processadores multi-core no mercado aumentou a demanda por
          ¸˜                                             ´
programacao concorrente. Em linhas gerais, o objetivo e utilizar recursos de ferramen-
                  ¸˜                             ¸˜          ¸˜
tas de programacao concorrente para implementacao de aplicacoes sobre tais arquiteturas
com vistas a obter melhores ´ndices de desempenho. A academia e o mercado apresentam
                            ı
            ¸˜                                                    ¸˜                ¸˜
diversas opcoes de ferramentas. Este trabalho anal´sa a implementacao de uma aplicacao
                                                  ı
que apresenta alto custo computacional em trˆ s destas ferramentas: Pthreads [Dre05],
                                               e
Cilk [Joe96] e Athreads [Cav06].
                         ´
       O estudo de caso e aplicado ao algoritmo do caixeiro viajante, cujo custo compu-
tacional est´ associado ao n´ mero de cidades que um caixeiro viajante necessita visitar.
            a               u
Os experimentos foram conduzidos em arquiteturas dual-core para avaliar o desempenho
                ¸˜
da implementacao considerando as ferramentas selecionadas.
         O restante deste trabalho encontra-se organizado como segue. O problema do
                    ´                   ¸˜                                ¸˜
caixeiro viajante e detalhado na Secao 2. Os ambientes de programacao concorrente
 a                       ¸˜
s˜ o apresentados na Secao 3. A estrat´ gia que foi adotada para obter a concorrˆ ncia no
                                          e                                       e
                                                                                     ¸˜
algoritmo do caixeiro viajante, juntamente com os dados obtidos atrav´ s das execucoes e
                                                                       e
                                                  ¸˜         ¸˜
a an´ lise dos resultados, s˜ o apresentados na Secao 4. A Secao 5 conclui o trabalho.
     a                      a

2. O problema do caixeiro viajante
                    ´
O caixeiro viajante e um problema cl´ ssico no conjunto dos problemas que possuem uma
                                      a
                                           ¸˜              ´
carga computacional elevada. A formulacao do problema e a seguinte: suponha que um
                                                                 ¸˜
caixeiro viajante deseja visitar N cidades de uma certa localizacao e que, entre alguns
pares de cidades existem rotas, permitindo a viagem de uma cidade para outra. Cada rota
tem um n´ mero associado, que pode representar a distˆ ncia ou o custo necess´ rio para
           u                                             a                      a
percorrˆ -la. Assim, o caixeiro viajante deseja encontrar um caminho que passe por cada
       e
uma das N cidades apenas uma vez, e al´ m disso que tenha o menor custo poss´vel; onde
                                         e                                    ı
                     ´
o custo do caminho e a soma dos custos das rotas percorridas [Mol04].
¸˜
             Tabela 1. Crescimento no numero de caminhos para avaliacao
                                       ´
                     Quantidade de cidades N´ meros de caminhos
                                            u
                               5                      120
                               6                      720
                               7                     5040
                               8                    40320
                               9                    362880
                              10                   3628800
                              11                  39916800
                              12                 479001600
                              13                6227020800
                              14               87178291200


                                                                                ¸˜
       Este trabalho implementou o algoritmo do caixeiro viajante com a avaliacao do
                                                              ¸˜
problema utilizando a abordagem ”forca-bruta”. Esta avaliacao consiste na verificacao
                                        ¸                                            ¸˜
de todos os caminhos existentes, para obter o menor caminho. A Tabela 1 mostra o
crescimento de caminhos poss´veis, entre 5 e 14 cidades, verificando um grande aumento
                              ı
de caminhos mesmo com um baixo n´ mero de cidades. Como o objetivo do algoritmo e
                                      u                                                 ´
encontrar o caminho de menor custo, sua complexidade est´ relacionada com o n´ mero de
                                                          a                  u
cidades a serem visitadas, e analisando o crescimento do n´ mero de caminhos poss´veis
                                                            u                      ı
                                                                             ¸˜
de acordo com o crescimento de n´ mero de cidades, nota-se que a computacao desse
                                    u
                                                                               ¸˜
problema mesmo com poucas cidades pode ser uma tarefa dif´cil e de longa duracao.
                                                              ı
                                        a ´ ´
        O desempenho computacional n˜ o e o unico motivo do estudo do problema do
caixeiro viajante. In´ meros problemas reais s˜ o modelados a partir deste problema ou
                     u                        a
                                  ´
suas variantes. Um exemplo disto e o processo de entrega de produtos por um fornecedor
                                       ¸˜              ´
em diferentes super-mercados. A obtencao de uma rota otima para entrega dos produtos,
resulta em um menor tempo de entrega e em um menor gasto com combust´vel. ı

                        ¸˜
3. Ambientes de programacao
                                        ¸˜
A escolha dos ambientes de programacao foi baseada na id´ ia de utilizar ferramentas
                                                             e
                                     ¸˜                          ¸˜
que oferecem uma camada de abstracao multithread para descricao da concorrˆ ncia da
                                                                                e
      ¸˜
aplicacao. Destas ferramentas, Athreads e Cilk representam propostas da academia, am-
                                             ¸˜                            ¸˜
bas disponibilizam uma interface de programacao que possibilita a manipulacao de tarefas
concorrentes de forma independente dos recursos da arquiteturas, facilitando o desenvol-
vimento do c´ digo. Pthreads representa uma ferramenta popular comercialmente.
             o
                                    ´                                 ¸˜
        O objetivo de Athreads e oferecer recursos para a exploracao do processamento
                                                                    ¸˜
de alto desempenho, provendo tanto uma interface de programacao concorrente de alto
 ı                  u                                            ´
n´vel, como um n´ cleo executivo. Com isso, o programador e capaz de descrever a con-
     e                    ¸˜
corrˆ ncia de sua aplicacao independente dos recursos computacionais dispon´veis na ar-
                                                                               ı
                                   ¸˜                                                   ¸˜
quitetura. Al´ m disso, a atribuicao das tarefas aos n´ s reais de processamento, a criacao
              e                                        o
e sincronizaca
             ¸ ˜ o de tarefas e o controle de acesso aos dados compartilhados passam a ser
       ¸˜
atribuicoes do ambiente, n˜ o mais do programador [Cav06].
                              a
            ´                                                    ¸˜
       Cilk e uma linguagem paralela multithread para programacao de multiprocessa-
                                       ´           a `
dores com mem´ ria compartilhada. Cilk e uma extens˜ o a linguagem C que fornece uma
               o
¸˜
estrutura para controle e sincronizacao do paralelismo, tendo um baixo n´vel de overhead
                                                                        ı
                       ¸˜
e possibilitando a criacao de uma thread com um custo somente de 2 a 6 vezes maior do
             ¸˜              ¸˜
que a invocacao de uma funcao em C. Muitos programas Cilk que rodam em um proces-
                                                                ¸˜
sador acabam tendo o desempenho com quase nenhuma degradacao em comparacao a um ¸˜
programa equivalente em C [Joe96].
                   ´                           ¸˜
        PThreads e uma interface de manipulacao de threads padronizada em 1995 pelo
Institute of Electrical and Electronic Engineers( IEEE ). Foi definida como um conjunto
de tipos de dados e procedimentos em C, definida na biblioteca pthreads.h. A id´ ia b´ sica
                                                                              e a
´
e a de ser uma API para o gerenciamento de threads [Dre05].

4. Estrat´ gias adotadas
         e
         e              ¸˜
Para crit´ rio de validacao do algoritmo do caixeiro viajante, a primeira vers˜ o foi desen-
                                                                              a
volvida de forma seq¨ encial, avaliando casos com 10,11 e 12 cidades. A definicao da
                        u                                                             ¸˜
        e                                        a                                   ¸˜
concorrˆ ncia no algoritmo foi obtida pela divis˜ o de tarefas que possuem execucao in-
                              ¸˜
dependente dentro da aplicacao. A distˆ ncia completa de um caminho foi separada para
                                          a
                                                           ´
ser computada concorrentemente. O caminho encontrado e computado a partir das somas
dos percursos das cidades que o caixeiro viajante visita a partir de sua origem at´ a ci-
                                                                                      e
dade destino. Cada thread criada calcula independentemente o melhor caminho em um
                           ´           ¸˜
intervalo. Um exemplo e uma aplicacao que possui 100 caminhos e duas threads. Neste
exemplo cada thread ir´ calcular 50 caminhos. A primeira thread ir´ calcular o menor ca-
                         a                                           a
minho no intervalo de 1..50 e a segunda thread ir´ calcular o melhor caminho no intervalo
                                                 a
                                   ¸˜ ´
de 51..100. Durante a sincronizacao e escolhido o menor caminho retornando por cada
thread.

                                   130                                            Versao Sequencial
                                                                                   Versao Pthreads
                                                                                   Versao Athreads
                                   120                                                  Versao Clilk
                                   110

                                   100
       Tempo Medio (em segundos)




                                   90

                                   80

                                   70

                                   60

                                   50

                                   40

                                   30

                                   20

                                   10

                                    0
                                         10                           11                               12
                                                                 # de cidades


                                                                                    ¸˜
                                              Figura 1. Tempos obtidos durante execucoes


                        ¸˜
      Os testes de execucao para este trabalho, foram feitos em um Pentiun 1,73 GHZ
Dual-Core, possuindo 512 de mem´ ria RAM e sistema operacional Debian GNU Linux.
                                o
´                            ¸˜
        Atrav´ s da Figura 1 e mostrado o tempo de execucao do caixeiro viajante com 10,
              e
11 e 12 cidades de forma seq¨ encial, em Pthreads, Athreads e em Cilk, sendo poss´vel
                                u                                                       ı
notar a diferenca nos tempos obtidos entre a vers˜ o seq¨ encial e as vers˜ es concorrentes.
                ¸                                a      u                 o
Os resultados mostram um ganho consider´ vel de desempenho a medida que a carga com-
                                           a
                                                          ¸˜
putacional aumenta. Os resultados obtidos com as execucoes no ambiente Athreads, Cilk
e Pthreads foram muito semelhantes, conseguindo praticamente o mesmo ganho de de-
                               ¸˜                                           ¸˜
sempenho em ambas as situacoes, quando comparado ao tempo de execucao apresentado
pela vers˜ o seq¨ encial .
         a       u

5. Conclus˜ o
          a
Atrav´ s do desenvolvimento do algoritmo do caixeiro viajante de forma concorrente,
       e
pode-se obter um aumento de desempenho consider´ vel. A diferenca entre os tempos
                                                       a               ¸
                                                         ¸˜
seq¨ enciais e concorrentes mostra que a efetiva utilizacao dos recursos disponibilizados
    u
                                            ¸˜                     ¸˜
pela arquitetura permite obter uma diminuicao do tempo de execucao e, com isto, um au-
                                  ¸˜          ¸˜                      ¸˜
mento no desempenho da aplicacao. A projecao dos tempos de execucao para um n´ merou
de cidades maior do que o n´ mero testado, permite observar que vers˜ es concorrentes
                               u                                         o
      a            e             a                                             ¸˜
obter˜ o tempos at´ 50% mais r´ pidos do que os tempos atingidos pela aplicacao em sua
vers˜ o seq¨ encial. Este ganho de desempenho pode ser explicado, pois a vers˜ o seq¨ en-
     a     u                                                                   a      u
                                                                                  ¸˜
cial computa a distˆ ncia de apenas um caminho por vez. Desta forma, a computacao dos
                     a
caminhos restantes fica bloqueada. A vers˜ o concorrente consegue calcular a distˆ ncia
                                             a                                       a
entre caminhos concorrentemente, conseguindo ent˜ o, computar mais de um caminho
                                                      a
por vez. Tendo em vista os diversos problemas reais que podem ser modelados de forma
                                     ¸˜
similar ao caixeiro viajante, a obtencao de melhores resultados no seu algoritmo ocasiona
uma melhoria em processos executados diariamente em casos reais.
         Como trabalho futuro, deseja-se implementar o algoritmo do caixeiro viajante em
um ambiente distribu´do, explorando tanto a concorrˆ ncia intra-n´ utilizando os ambien-
                     ı                                e             o
                        e            e          e               ¸˜
tes testados, como tamb´ m a concorrˆ ncia atrav´ s da distribuicao de tarefas entre diferen-
tes n´ s de um agregado de computadores.
      o

Referˆ ncias
     e
CAVALHEIRO, G. G. H. et al Anahy: A programming environment for cluster com-
  puting In VII High Performance Computing for Computational Science, Berlin 2006
  Springer-Verlag(LNCS 4395)
DREPPER, U. e MOLNAR, I.             The native POSIX thread library for Linux.
  http://people.redhat.com/drepper/nptl-design.pdf(05/dez/2007)
MOLE, V. L. D. et al Caixeiro Viajante - Abordagem Baseada no Algoritmo Simulated
                                                  ¸˜
 Annealing In IV Congresso Brasileiro de Computacao, pages 18–21, Brasil, 2004
JOERG, C. F. The Cilk System for Parallel Multithreaded Computing In MIT Press,
  Massachusetts, Jan. 1996

Más contenido relacionado

Similar a Análise do problema do caixeiro viajante - Versão artigo - ERAD 2008

Projeto de Redes Otimizadas de Transporte Público por Ônibus Utilizando Algor...
Projeto de Redes Otimizadas de Transporte Público por Ônibus Utilizando Algor...Projeto de Redes Otimizadas de Transporte Público por Ônibus Utilizando Algor...
Projeto de Redes Otimizadas de Transporte Público por Ônibus Utilizando Algor...Renato Arbex
 
Aplicação da Técnica Mapreduce na Modelagem de Algoritmos Genéticos para o “P...
Aplicação da Técnica Mapreduce na Modelagem de Algoritmos Genéticos para o “P...Aplicação da Técnica Mapreduce na Modelagem de Algoritmos Genéticos para o “P...
Aplicação da Técnica Mapreduce na Modelagem de Algoritmos Genéticos para o “P...wesleylouzeiro
 
Fluxos em Rede e Associação
Fluxos em Rede e AssociaçãoFluxos em Rede e Associação
Fluxos em Rede e AssociaçãoIorgama Porcely
 
Implementation of a Participatory Sensing Solution to Collect Data About Pave...
Implementation of a Participatory Sensing Solution to Collect Data About Pave...Implementation of a Participatory Sensing Solution to Collect Data About Pave...
Implementation of a Participatory Sensing Solution to Collect Data About Pave...Eduardo Carrara de Araujo
 
Sistema de informação ao usuário da rede de transporte público (ônibus) atrav...
Sistema de informação ao usuário da rede de transporte público (ônibus) atrav...Sistema de informação ao usuário da rede de transporte público (ônibus) atrav...
Sistema de informação ao usuário da rede de transporte público (ônibus) atrav...Renato Arbex
 
Parte c planejamento e dimensionamento de redes [modo de compatibilidade]
Parte c   planejamento e dimensionamento de redes [modo de compatibilidade]Parte c   planejamento e dimensionamento de redes [modo de compatibilidade]
Parte c planejamento e dimensionamento de redes [modo de compatibilidade]Eduardo Facchini
 
Um índice de acessibilidade de aeroportos que incorpora usuários com diferent...
Um índice de acessibilidade de aeroportos que incorpora usuários com diferent...Um índice de acessibilidade de aeroportos que incorpora usuários com diferent...
Um índice de acessibilidade de aeroportos que incorpora usuários com diferent...Scott Rains
 
Ferramenta de avaliação de terminais uma contribuição para o transporte sobre...
Ferramenta de avaliação de terminais uma contribuição para o transporte sobre...Ferramenta de avaliação de terminais uma contribuição para o transporte sobre...
Ferramenta de avaliação de terminais uma contribuição para o transporte sobre...Cauê Guazzelli
 
Projeto Aplicado 2012 - O SISTEMA OmniSAT APLICADO NO CONTROLE DO PROCESSO D...
Projeto Aplicado 2012 - O  SISTEMA OmniSAT APLICADO NO CONTROLE DO PROCESSO D...Projeto Aplicado 2012 - O  SISTEMA OmniSAT APLICADO NO CONTROLE DO PROCESSO D...
Projeto Aplicado 2012 - O SISTEMA OmniSAT APLICADO NO CONTROLE DO PROCESSO D...Sidnei Reis
 
Condução Energeticamente Eficiente na Exploração Ferroviária em Portugal - Ap...
Condução Energeticamente Eficiente na Exploração Ferroviária em Portugal - Ap...Condução Energeticamente Eficiente na Exploração Ferroviária em Portugal - Ap...
Condução Energeticamente Eficiente na Exploração Ferroviária em Portugal - Ap...João Vieira
 
Trabalho Inglês Técnico.
Trabalho Inglês Técnico.Trabalho Inglês Técnico.
Trabalho Inglês Técnico.Lucas Lopes
 
Logística Urbana - Uma Alternativa e Complemento na Distribuição com o Uso de...
Logística Urbana - Uma Alternativa e Complemento na Distribuição com o Uso de...Logística Urbana - Uma Alternativa e Complemento na Distribuição com o Uso de...
Logística Urbana - Uma Alternativa e Complemento na Distribuição com o Uso de...Luis Neto
 
Problema do Caixeiro-Viajante com Restrições de Tempo
Problema do Caixeiro-Viajante com Restrições de TempoProblema do Caixeiro-Viajante com Restrições de Tempo
Problema do Caixeiro-Viajante com Restrições de TempoJoao Gonçalves
 
InterSCSimulator: A Scalable, Open Source, Smart City Simulator
InterSCSimulator: A Scalable, Open Source, Smart City SimulatorInterSCSimulator: A Scalable, Open Source, Smart City Simulator
InterSCSimulator: A Scalable, Open Source, Smart City SimulatorEduardo Santana
 
O problema do transporte aplicado à grafos
O problema do transporte aplicado à grafosO problema do transporte aplicado à grafos
O problema do transporte aplicado à grafosEduardo Souza
 
Logística tese marcos-roberto_silva
Logística tese marcos-roberto_silvaLogística tese marcos-roberto_silva
Logística tese marcos-roberto_silvaAndré Jun Miki
 
OPTIMIZAÇÃO DA RECOLHA SELECTIVA DE RESÍDUOS SÓLIDOS URBANOS
OPTIMIZAÇÃO DA RECOLHA SELECTIVA DE RESÍDUOS SÓLIDOS URBANOSOPTIMIZAÇÃO DA RECOLHA SELECTIVA DE RESÍDUOS SÓLIDOS URBANOS
OPTIMIZAÇÃO DA RECOLHA SELECTIVA DE RESÍDUOS SÓLIDOS URBANOSIgor Boieiro
 

Similar a Análise do problema do caixeiro viajante - Versão artigo - ERAD 2008 (20)

Projeto de Redes Otimizadas de Transporte Público por Ônibus Utilizando Algor...
Projeto de Redes Otimizadas de Transporte Público por Ônibus Utilizando Algor...Projeto de Redes Otimizadas de Transporte Público por Ônibus Utilizando Algor...
Projeto de Redes Otimizadas de Transporte Público por Ônibus Utilizando Algor...
 
Aplicação da Técnica Mapreduce na Modelagem de Algoritmos Genéticos para o “P...
Aplicação da Técnica Mapreduce na Modelagem de Algoritmos Genéticos para o “P...Aplicação da Técnica Mapreduce na Modelagem de Algoritmos Genéticos para o “P...
Aplicação da Técnica Mapreduce na Modelagem de Algoritmos Genéticos para o “P...
 
Fluxos em Rede e Associação
Fluxos em Rede e AssociaçãoFluxos em Rede e Associação
Fluxos em Rede e Associação
 
Implementation of a Participatory Sensing Solution to Collect Data About Pave...
Implementation of a Participatory Sensing Solution to Collect Data About Pave...Implementation of a Participatory Sensing Solution to Collect Data About Pave...
Implementation of a Participatory Sensing Solution to Collect Data About Pave...
 
Sistema de informação ao usuário da rede de transporte público (ônibus) atrav...
Sistema de informação ao usuário da rede de transporte público (ônibus) atrav...Sistema de informação ao usuário da rede de transporte público (ônibus) atrav...
Sistema de informação ao usuário da rede de transporte público (ônibus) atrav...
 
Albertolima a
Albertolima aAlbertolima a
Albertolima a
 
Parte c planejamento e dimensionamento de redes [modo de compatibilidade]
Parte c   planejamento e dimensionamento de redes [modo de compatibilidade]Parte c   planejamento e dimensionamento de redes [modo de compatibilidade]
Parte c planejamento e dimensionamento de redes [modo de compatibilidade]
 
Um índice de acessibilidade de aeroportos que incorpora usuários com diferent...
Um índice de acessibilidade de aeroportos que incorpora usuários com diferent...Um índice de acessibilidade de aeroportos que incorpora usuários com diferent...
Um índice de acessibilidade de aeroportos que incorpora usuários com diferent...
 
Ferramenta de avaliação de terminais uma contribuição para o transporte sobre...
Ferramenta de avaliação de terminais uma contribuição para o transporte sobre...Ferramenta de avaliação de terminais uma contribuição para o transporte sobre...
Ferramenta de avaliação de terminais uma contribuição para o transporte sobre...
 
Projeto Aplicado 2012 - O SISTEMA OmniSAT APLICADO NO CONTROLE DO PROCESSO D...
Projeto Aplicado 2012 - O  SISTEMA OmniSAT APLICADO NO CONTROLE DO PROCESSO D...Projeto Aplicado 2012 - O  SISTEMA OmniSAT APLICADO NO CONTROLE DO PROCESSO D...
Projeto Aplicado 2012 - O SISTEMA OmniSAT APLICADO NO CONTROLE DO PROCESSO D...
 
Educacao rodoviaria
Educacao rodoviariaEducacao rodoviaria
Educacao rodoviaria
 
Condução Energeticamente Eficiente na Exploração Ferroviária em Portugal - Ap...
Condução Energeticamente Eficiente na Exploração Ferroviária em Portugal - Ap...Condução Energeticamente Eficiente na Exploração Ferroviária em Portugal - Ap...
Condução Energeticamente Eficiente na Exploração Ferroviária em Portugal - Ap...
 
Trabalho Inglês Técnico.
Trabalho Inglês Técnico.Trabalho Inglês Técnico.
Trabalho Inglês Técnico.
 
Logística Urbana - Uma Alternativa e Complemento na Distribuição com o Uso de...
Logística Urbana - Uma Alternativa e Complemento na Distribuição com o Uso de...Logística Urbana - Uma Alternativa e Complemento na Distribuição com o Uso de...
Logística Urbana - Uma Alternativa e Complemento na Distribuição com o Uso de...
 
Problema do Caixeiro-Viajante com Restrições de Tempo
Problema do Caixeiro-Viajante com Restrições de TempoProblema do Caixeiro-Viajante com Restrições de Tempo
Problema do Caixeiro-Viajante com Restrições de Tempo
 
App
AppApp
App
 
InterSCSimulator: A Scalable, Open Source, Smart City Simulator
InterSCSimulator: A Scalable, Open Source, Smart City SimulatorInterSCSimulator: A Scalable, Open Source, Smart City Simulator
InterSCSimulator: A Scalable, Open Source, Smart City Simulator
 
O problema do transporte aplicado à grafos
O problema do transporte aplicado à grafosO problema do transporte aplicado à grafos
O problema do transporte aplicado à grafos
 
Logística tese marcos-roberto_silva
Logística tese marcos-roberto_silvaLogística tese marcos-roberto_silva
Logística tese marcos-roberto_silva
 
OPTIMIZAÇÃO DA RECOLHA SELECTIVA DE RESÍDUOS SÓLIDOS URBANOS
OPTIMIZAÇÃO DA RECOLHA SELECTIVA DE RESÍDUOS SÓLIDOS URBANOSOPTIMIZAÇÃO DA RECOLHA SELECTIVA DE RESÍDUOS SÓLIDOS URBANOS
OPTIMIZAÇÃO DA RECOLHA SELECTIVA DE RESÍDUOS SÓLIDOS URBANOS
 

Más de Jerônimo Medina Madruga

PyGame Over: Insert coins to learn with Python - Tchelinux Porto Alegre 2019
PyGame Over: Insert coins to learn with Python - Tchelinux Porto Alegre 2019PyGame Over: Insert coins to learn with Python - Tchelinux Porto Alegre 2019
PyGame Over: Insert coins to learn with Python - Tchelinux Porto Alegre 2019Jerônimo Medina Madruga
 
Rock & Code - Como criar música programando - Tchelinux pelotas 2019
Rock & Code - Como criar música programando - Tchelinux pelotas 2019Rock & Code - Como criar música programando - Tchelinux pelotas 2019
Rock & Code - Como criar música programando - Tchelinux pelotas 2019Jerônimo Medina Madruga
 
Rock 'n' Code - Como criar música programando - Tchelinux Camaquã 2019
Rock 'n' Code - Como criar música programando - Tchelinux Camaquã 2019Rock 'n' Code - Como criar música programando - Tchelinux Camaquã 2019
Rock 'n' Code - Como criar música programando - Tchelinux Camaquã 2019Jerônimo Medina Madruga
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Jerônimo Medina Madruga
 
Dê a cara a tapa como se destacar no mercado de trabalho - Tchelinux Sant'An...
Dê a cara a tapa  como se destacar no mercado de trabalho - Tchelinux Sant'An...Dê a cara a tapa  como se destacar no mercado de trabalho - Tchelinux Sant'An...
Dê a cara a tapa como se destacar no mercado de trabalho - Tchelinux Sant'An...Jerônimo Medina Madruga
 
Rock 'n' Code: Como criar música programando - I Semana Acadêmica da Licencia...
Rock 'n' Code: Como criar música programando - I Semana Acadêmica da Licencia...Rock 'n' Code: Como criar música programando - I Semana Acadêmica da Licencia...
Rock 'n' Code: Como criar música programando - I Semana Acadêmica da Licencia...Jerônimo Medina Madruga
 
Do Zero ao Python - I Semana Acadêmica da Licenciatura em Computação - IFSul ...
Do Zero ao Python - I Semana Acadêmica da Licenciatura em Computação - IFSul ...Do Zero ao Python - I Semana Acadêmica da Licenciatura em Computação - IFSul ...
Do Zero ao Python - I Semana Acadêmica da Licenciatura em Computação - IFSul ...Jerônimo Medina Madruga
 
Desmistificando a gamificação: como "jogos" podem potencializar a educação - ...
Desmistificando a gamificação: como "jogos" podem potencializar a educação - ...Desmistificando a gamificação: como "jogos" podem potencializar a educação - ...
Desmistificando a gamificação: como "jogos" podem potencializar a educação - ...Jerônimo Medina Madruga
 
Rock And Code: Como criar música programando
Rock And Code: Como criar música programandoRock And Code: Como criar música programando
Rock And Code: Como criar música programandoJerônimo Medina Madruga
 
Remember the name: Como se tornar um rockstar no mercado de trabalho
Remember the name: Como se tornar um rockstar no mercado de trabalhoRemember the name: Como se tornar um rockstar no mercado de trabalho
Remember the name: Como se tornar um rockstar no mercado de trabalhoJerônimo Medina Madruga
 
Como se tornar um programador melhor - Saci 2017 IFSul Bagé
Como se tornar um programador melhor - Saci 2017 IFSul BagéComo se tornar um programador melhor - Saci 2017 IFSul Bagé
Como se tornar um programador melhor - Saci 2017 IFSul BagéJerônimo Medina Madruga
 
Dê a cara a tapa 5 estratégias para se sobressair no mercado e ser um profis...
Dê a cara a tapa  5 estratégias para se sobressair no mercado e ser um profis...Dê a cara a tapa  5 estratégias para se sobressair no mercado e ser um profis...
Dê a cara a tapa 5 estratégias para se sobressair no mercado e ser um profis...Jerônimo Medina Madruga
 
Aprendendo a aprender software livre - Tchelinux Bagé 2017
Aprendendo a aprender software livre - Tchelinux Bagé 2017Aprendendo a aprender software livre - Tchelinux Bagé 2017
Aprendendo a aprender software livre - Tchelinux Bagé 2017Jerônimo Medina Madruga
 
Moodle direto das trincheiras - Tchelinux UCPel 2017
Moodle direto das trincheiras - Tchelinux UCPel 2017Moodle direto das trincheiras - Tchelinux UCPel 2017
Moodle direto das trincheiras - Tchelinux UCPel 2017Jerônimo Medina Madruga
 
Aprendendo Software Livre como Neo Aprendeu Kung Fu - Tchelinux UCPel 2017
Aprendendo Software Livre como Neo Aprendeu Kung Fu - Tchelinux UCPel 2017Aprendendo Software Livre como Neo Aprendeu Kung Fu - Tchelinux UCPel 2017
Aprendendo Software Livre como Neo Aprendeu Kung Fu - Tchelinux UCPel 2017Jerônimo Medina Madruga
 
Tudo que você queria saber sobre software livre mas não tinha coragem de perg...
Tudo que você queria saber sobre software livre mas não tinha coragem de perg...Tudo que você queria saber sobre software livre mas não tinha coragem de perg...
Tudo que você queria saber sobre software livre mas não tinha coragem de perg...Jerônimo Medina Madruga
 
Aprendendo a aprender software livre - Tchelinux Bagé 2016
Aprendendo a aprender software livre - Tchelinux Bagé 2016Aprendendo a aprender software livre - Tchelinux Bagé 2016
Aprendendo a aprender software livre - Tchelinux Bagé 2016Jerônimo Medina Madruga
 
Need for (web) speed: Uma introdução a otimização de velocidade de sites e We...
Need for (web) speed: Uma introdução a otimização de velocidade de sites e We...Need for (web) speed: Uma introdução a otimização de velocidade de sites e We...
Need for (web) speed: Uma introdução a otimização de velocidade de sites e We...Jerônimo Medina Madruga
 
Dê a Cara a Tapa: Uma Palestra Intrigante sobre Oceano Azul, Cauda Longa, Mer...
Dê a Cara a Tapa: Uma Palestra Intrigante sobre Oceano Azul, Cauda Longa, Mer...Dê a Cara a Tapa: Uma Palestra Intrigante sobre Oceano Azul, Cauda Longa, Mer...
Dê a Cara a Tapa: Uma Palestra Intrigante sobre Oceano Azul, Cauda Longa, Mer...Jerônimo Medina Madruga
 

Más de Jerônimo Medina Madruga (20)

PyGame Over: Insert coins to learn with Python - Tchelinux Porto Alegre 2019
PyGame Over: Insert coins to learn with Python - Tchelinux Porto Alegre 2019PyGame Over: Insert coins to learn with Python - Tchelinux Porto Alegre 2019
PyGame Over: Insert coins to learn with Python - Tchelinux Porto Alegre 2019
 
Rock & Code - Como criar música programando - Tchelinux pelotas 2019
Rock & Code - Como criar música programando - Tchelinux pelotas 2019Rock & Code - Como criar música programando - Tchelinux pelotas 2019
Rock & Code - Como criar música programando - Tchelinux pelotas 2019
 
Rock 'n' Code - Como criar música programando - Tchelinux Camaquã 2019
Rock 'n' Code - Como criar música programando - Tchelinux Camaquã 2019Rock 'n' Code - Como criar música programando - Tchelinux Camaquã 2019
Rock 'n' Code - Como criar música programando - Tchelinux Camaquã 2019
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
 
Dê a cara a tapa como se destacar no mercado de trabalho - Tchelinux Sant'An...
Dê a cara a tapa  como se destacar no mercado de trabalho - Tchelinux Sant'An...Dê a cara a tapa  como se destacar no mercado de trabalho - Tchelinux Sant'An...
Dê a cara a tapa como se destacar no mercado de trabalho - Tchelinux Sant'An...
 
Rock 'n' Code: Como criar música programando - I Semana Acadêmica da Licencia...
Rock 'n' Code: Como criar música programando - I Semana Acadêmica da Licencia...Rock 'n' Code: Como criar música programando - I Semana Acadêmica da Licencia...
Rock 'n' Code: Como criar música programando - I Semana Acadêmica da Licencia...
 
Do Zero ao Python - I Semana Acadêmica da Licenciatura em Computação - IFSul ...
Do Zero ao Python - I Semana Acadêmica da Licenciatura em Computação - IFSul ...Do Zero ao Python - I Semana Acadêmica da Licenciatura em Computação - IFSul ...
Do Zero ao Python - I Semana Acadêmica da Licenciatura em Computação - IFSul ...
 
Desmistificando a gamificação: como "jogos" podem potencializar a educação - ...
Desmistificando a gamificação: como "jogos" podem potencializar a educação - ...Desmistificando a gamificação: como "jogos" podem potencializar a educação - ...
Desmistificando a gamificação: como "jogos" podem potencializar a educação - ...
 
Rock And Code: Como criar música programando
Rock And Code: Como criar música programandoRock And Code: Como criar música programando
Rock And Code: Como criar música programando
 
Do zero ao python em 40 minutos!
Do zero ao python em 40 minutos!Do zero ao python em 40 minutos!
Do zero ao python em 40 minutos!
 
Remember the name: Como se tornar um rockstar no mercado de trabalho
Remember the name: Como se tornar um rockstar no mercado de trabalhoRemember the name: Como se tornar um rockstar no mercado de trabalho
Remember the name: Como se tornar um rockstar no mercado de trabalho
 
Como se tornar um programador melhor - Saci 2017 IFSul Bagé
Como se tornar um programador melhor - Saci 2017 IFSul BagéComo se tornar um programador melhor - Saci 2017 IFSul Bagé
Como se tornar um programador melhor - Saci 2017 IFSul Bagé
 
Dê a cara a tapa 5 estratégias para se sobressair no mercado e ser um profis...
Dê a cara a tapa  5 estratégias para se sobressair no mercado e ser um profis...Dê a cara a tapa  5 estratégias para se sobressair no mercado e ser um profis...
Dê a cara a tapa 5 estratégias para se sobressair no mercado e ser um profis...
 
Aprendendo a aprender software livre - Tchelinux Bagé 2017
Aprendendo a aprender software livre - Tchelinux Bagé 2017Aprendendo a aprender software livre - Tchelinux Bagé 2017
Aprendendo a aprender software livre - Tchelinux Bagé 2017
 
Moodle direto das trincheiras - Tchelinux UCPel 2017
Moodle direto das trincheiras - Tchelinux UCPel 2017Moodle direto das trincheiras - Tchelinux UCPel 2017
Moodle direto das trincheiras - Tchelinux UCPel 2017
 
Aprendendo Software Livre como Neo Aprendeu Kung Fu - Tchelinux UCPel 2017
Aprendendo Software Livre como Neo Aprendeu Kung Fu - Tchelinux UCPel 2017Aprendendo Software Livre como Neo Aprendeu Kung Fu - Tchelinux UCPel 2017
Aprendendo Software Livre como Neo Aprendeu Kung Fu - Tchelinux UCPel 2017
 
Tudo que você queria saber sobre software livre mas não tinha coragem de perg...
Tudo que você queria saber sobre software livre mas não tinha coragem de perg...Tudo que você queria saber sobre software livre mas não tinha coragem de perg...
Tudo que você queria saber sobre software livre mas não tinha coragem de perg...
 
Aprendendo a aprender software livre - Tchelinux Bagé 2016
Aprendendo a aprender software livre - Tchelinux Bagé 2016Aprendendo a aprender software livre - Tchelinux Bagé 2016
Aprendendo a aprender software livre - Tchelinux Bagé 2016
 
Need for (web) speed: Uma introdução a otimização de velocidade de sites e We...
Need for (web) speed: Uma introdução a otimização de velocidade de sites e We...Need for (web) speed: Uma introdução a otimização de velocidade de sites e We...
Need for (web) speed: Uma introdução a otimização de velocidade de sites e We...
 
Dê a Cara a Tapa: Uma Palestra Intrigante sobre Oceano Azul, Cauda Longa, Mer...
Dê a Cara a Tapa: Uma Palestra Intrigante sobre Oceano Azul, Cauda Longa, Mer...Dê a Cara a Tapa: Uma Palestra Intrigante sobre Oceano Azul, Cauda Longa, Mer...
Dê a Cara a Tapa: Uma Palestra Intrigante sobre Oceano Azul, Cauda Longa, Mer...
 

Análise do problema do caixeiro viajante - Versão artigo - ERAD 2008

  • 1. An´ lise do problema do caixeiro viajante sobre diferentes a ¸˜ ambientes de programacao concorrente Elvio Vicosa Junior, Jeronimo M. Medina, Rafael Pereira, ¸ Gerson Geraldo H. Cavalheiro Departamento de Inform´ tica a Universidade Federal de Pelotas (UFPel) Pelotas – RS – Brasil {evicosa ifm, jmadruga.ifm, rpereira.ifm, gerson.cavalheiro}@ufpel.edu.br Resumo. O problema do caixeiro viajante e uma aplicacao conhecida por pos- ´ ¸˜ suir alto custo computacional. Neste trabalho foi realizado um estudo do de- sempenho desta aplicacao em arquiteturas dual-core utilizando diferentes am- ¸˜ bientes de execucao: Pthreads, Cilk e Athreads. Os resultados de desempenho ¸˜ indicam ganho de desempenho em todas as vers˜ es concorrentes. o ¸˜ 1. Introducao ¸˜ A popularizacao dos processadores multi-core no mercado aumentou a demanda por ¸˜ ´ programacao concorrente. Em linhas gerais, o objetivo e utilizar recursos de ferramen- ¸˜ ¸˜ ¸˜ tas de programacao concorrente para implementacao de aplicacoes sobre tais arquiteturas com vistas a obter melhores ´ndices de desempenho. A academia e o mercado apresentam ı ¸˜ ¸˜ ¸˜ diversas opcoes de ferramentas. Este trabalho anal´sa a implementacao de uma aplicacao ı que apresenta alto custo computacional em trˆ s destas ferramentas: Pthreads [Dre05], e Cilk [Joe96] e Athreads [Cav06]. ´ O estudo de caso e aplicado ao algoritmo do caixeiro viajante, cujo custo compu- tacional est´ associado ao n´ mero de cidades que um caixeiro viajante necessita visitar. a u Os experimentos foram conduzidos em arquiteturas dual-core para avaliar o desempenho ¸˜ da implementacao considerando as ferramentas selecionadas. O restante deste trabalho encontra-se organizado como segue. O problema do ´ ¸˜ ¸˜ caixeiro viajante e detalhado na Secao 2. Os ambientes de programacao concorrente a ¸˜ s˜ o apresentados na Secao 3. A estrat´ gia que foi adotada para obter a concorrˆ ncia no e e ¸˜ algoritmo do caixeiro viajante, juntamente com os dados obtidos atrav´ s das execucoes e e ¸˜ ¸˜ a an´ lise dos resultados, s˜ o apresentados na Secao 4. A Secao 5 conclui o trabalho. a a 2. O problema do caixeiro viajante ´ O caixeiro viajante e um problema cl´ ssico no conjunto dos problemas que possuem uma a ¸˜ ´ carga computacional elevada. A formulacao do problema e a seguinte: suponha que um ¸˜ caixeiro viajante deseja visitar N cidades de uma certa localizacao e que, entre alguns pares de cidades existem rotas, permitindo a viagem de uma cidade para outra. Cada rota tem um n´ mero associado, que pode representar a distˆ ncia ou o custo necess´ rio para u a a percorrˆ -la. Assim, o caixeiro viajante deseja encontrar um caminho que passe por cada e uma das N cidades apenas uma vez, e al´ m disso que tenha o menor custo poss´vel; onde e ı ´ o custo do caminho e a soma dos custos das rotas percorridas [Mol04].
  • 2. ¸˜ Tabela 1. Crescimento no numero de caminhos para avaliacao ´ Quantidade de cidades N´ meros de caminhos u 5 120 6 720 7 5040 8 40320 9 362880 10 3628800 11 39916800 12 479001600 13 6227020800 14 87178291200 ¸˜ Este trabalho implementou o algoritmo do caixeiro viajante com a avaliacao do ¸˜ problema utilizando a abordagem ”forca-bruta”. Esta avaliacao consiste na verificacao ¸ ¸˜ de todos os caminhos existentes, para obter o menor caminho. A Tabela 1 mostra o crescimento de caminhos poss´veis, entre 5 e 14 cidades, verificando um grande aumento ı de caminhos mesmo com um baixo n´ mero de cidades. Como o objetivo do algoritmo e u ´ encontrar o caminho de menor custo, sua complexidade est´ relacionada com o n´ mero de a u cidades a serem visitadas, e analisando o crescimento do n´ mero de caminhos poss´veis u ı ¸˜ de acordo com o crescimento de n´ mero de cidades, nota-se que a computacao desse u ¸˜ problema mesmo com poucas cidades pode ser uma tarefa dif´cil e de longa duracao. ı a ´ ´ O desempenho computacional n˜ o e o unico motivo do estudo do problema do caixeiro viajante. In´ meros problemas reais s˜ o modelados a partir deste problema ou u a ´ suas variantes. Um exemplo disto e o processo de entrega de produtos por um fornecedor ¸˜ ´ em diferentes super-mercados. A obtencao de uma rota otima para entrega dos produtos, resulta em um menor tempo de entrega e em um menor gasto com combust´vel. ı ¸˜ 3. Ambientes de programacao ¸˜ A escolha dos ambientes de programacao foi baseada na id´ ia de utilizar ferramentas e ¸˜ ¸˜ que oferecem uma camada de abstracao multithread para descricao da concorrˆ ncia da e ¸˜ aplicacao. Destas ferramentas, Athreads e Cilk representam propostas da academia, am- ¸˜ ¸˜ bas disponibilizam uma interface de programacao que possibilita a manipulacao de tarefas concorrentes de forma independente dos recursos da arquiteturas, facilitando o desenvol- vimento do c´ digo. Pthreads representa uma ferramenta popular comercialmente. o ´ ¸˜ O objetivo de Athreads e oferecer recursos para a exploracao do processamento ¸˜ de alto desempenho, provendo tanto uma interface de programacao concorrente de alto ı u ´ n´vel, como um n´ cleo executivo. Com isso, o programador e capaz de descrever a con- e ¸˜ corrˆ ncia de sua aplicacao independente dos recursos computacionais dispon´veis na ar- ı ¸˜ ¸˜ quitetura. Al´ m disso, a atribuicao das tarefas aos n´ s reais de processamento, a criacao e o e sincronizaca ¸ ˜ o de tarefas e o controle de acesso aos dados compartilhados passam a ser ¸˜ atribuicoes do ambiente, n˜ o mais do programador [Cav06]. a ´ ¸˜ Cilk e uma linguagem paralela multithread para programacao de multiprocessa- ´ a ` dores com mem´ ria compartilhada. Cilk e uma extens˜ o a linguagem C que fornece uma o
  • 3. ¸˜ estrutura para controle e sincronizacao do paralelismo, tendo um baixo n´vel de overhead ı ¸˜ e possibilitando a criacao de uma thread com um custo somente de 2 a 6 vezes maior do ¸˜ ¸˜ que a invocacao de uma funcao em C. Muitos programas Cilk que rodam em um proces- ¸˜ sador acabam tendo o desempenho com quase nenhuma degradacao em comparacao a um ¸˜ programa equivalente em C [Joe96]. ´ ¸˜ PThreads e uma interface de manipulacao de threads padronizada em 1995 pelo Institute of Electrical and Electronic Engineers( IEEE ). Foi definida como um conjunto de tipos de dados e procedimentos em C, definida na biblioteca pthreads.h. A id´ ia b´ sica e a ´ e a de ser uma API para o gerenciamento de threads [Dre05]. 4. Estrat´ gias adotadas e e ¸˜ Para crit´ rio de validacao do algoritmo do caixeiro viajante, a primeira vers˜ o foi desen- a volvida de forma seq¨ encial, avaliando casos com 10,11 e 12 cidades. A definicao da u ¸˜ e a ¸˜ concorrˆ ncia no algoritmo foi obtida pela divis˜ o de tarefas que possuem execucao in- ¸˜ dependente dentro da aplicacao. A distˆ ncia completa de um caminho foi separada para a ´ ser computada concorrentemente. O caminho encontrado e computado a partir das somas dos percursos das cidades que o caixeiro viajante visita a partir de sua origem at´ a ci- e dade destino. Cada thread criada calcula independentemente o melhor caminho em um ´ ¸˜ intervalo. Um exemplo e uma aplicacao que possui 100 caminhos e duas threads. Neste exemplo cada thread ir´ calcular 50 caminhos. A primeira thread ir´ calcular o menor ca- a a minho no intervalo de 1..50 e a segunda thread ir´ calcular o melhor caminho no intervalo a ¸˜ ´ de 51..100. Durante a sincronizacao e escolhido o menor caminho retornando por cada thread. 130 Versao Sequencial Versao Pthreads Versao Athreads 120 Versao Clilk 110 100 Tempo Medio (em segundos) 90 80 70 60 50 40 30 20 10 0 10 11 12 # de cidades ¸˜ Figura 1. Tempos obtidos durante execucoes ¸˜ Os testes de execucao para este trabalho, foram feitos em um Pentiun 1,73 GHZ Dual-Core, possuindo 512 de mem´ ria RAM e sistema operacional Debian GNU Linux. o
  • 4. ´ ¸˜ Atrav´ s da Figura 1 e mostrado o tempo de execucao do caixeiro viajante com 10, e 11 e 12 cidades de forma seq¨ encial, em Pthreads, Athreads e em Cilk, sendo poss´vel u ı notar a diferenca nos tempos obtidos entre a vers˜ o seq¨ encial e as vers˜ es concorrentes. ¸ a u o Os resultados mostram um ganho consider´ vel de desempenho a medida que a carga com- a ¸˜ putacional aumenta. Os resultados obtidos com as execucoes no ambiente Athreads, Cilk e Pthreads foram muito semelhantes, conseguindo praticamente o mesmo ganho de de- ¸˜ ¸˜ sempenho em ambas as situacoes, quando comparado ao tempo de execucao apresentado pela vers˜ o seq¨ encial . a u 5. Conclus˜ o a Atrav´ s do desenvolvimento do algoritmo do caixeiro viajante de forma concorrente, e pode-se obter um aumento de desempenho consider´ vel. A diferenca entre os tempos a ¸ ¸˜ seq¨ enciais e concorrentes mostra que a efetiva utilizacao dos recursos disponibilizados u ¸˜ ¸˜ pela arquitetura permite obter uma diminuicao do tempo de execucao e, com isto, um au- ¸˜ ¸˜ ¸˜ mento no desempenho da aplicacao. A projecao dos tempos de execucao para um n´ merou de cidades maior do que o n´ mero testado, permite observar que vers˜ es concorrentes u o a e a ¸˜ obter˜ o tempos at´ 50% mais r´ pidos do que os tempos atingidos pela aplicacao em sua vers˜ o seq¨ encial. Este ganho de desempenho pode ser explicado, pois a vers˜ o seq¨ en- a u a u ¸˜ cial computa a distˆ ncia de apenas um caminho por vez. Desta forma, a computacao dos a caminhos restantes fica bloqueada. A vers˜ o concorrente consegue calcular a distˆ ncia a a entre caminhos concorrentemente, conseguindo ent˜ o, computar mais de um caminho a por vez. Tendo em vista os diversos problemas reais que podem ser modelados de forma ¸˜ similar ao caixeiro viajante, a obtencao de melhores resultados no seu algoritmo ocasiona uma melhoria em processos executados diariamente em casos reais. Como trabalho futuro, deseja-se implementar o algoritmo do caixeiro viajante em um ambiente distribu´do, explorando tanto a concorrˆ ncia intra-n´ utilizando os ambien- ı e o e e e ¸˜ tes testados, como tamb´ m a concorrˆ ncia atrav´ s da distribuicao de tarefas entre diferen- tes n´ s de um agregado de computadores. o Referˆ ncias e CAVALHEIRO, G. G. H. et al Anahy: A programming environment for cluster com- puting In VII High Performance Computing for Computational Science, Berlin 2006 Springer-Verlag(LNCS 4395) DREPPER, U. e MOLNAR, I. The native POSIX thread library for Linux. http://people.redhat.com/drepper/nptl-design.pdf(05/dez/2007) MOLE, V. L. D. et al Caixeiro Viajante - Abordagem Baseada no Algoritmo Simulated ¸˜ Annealing In IV Congresso Brasileiro de Computacao, pages 18–21, Brasil, 2004 JOERG, C. F. The Cilk System for Parallel Multithreaded Computing In MIT Press, Massachusetts, Jan. 1996