You are on page 1of 15

DEVELOPMENT OF A HEURISTIC TYPE "GENERATE AND TEST", PARALLEL AND RANDOM, TO OPTIMIZE FUNCTIONS IN GPU Henrique Fagundes Gasparoto

Luiz Otávio Saraiva Ferreira henrique.gasparoto@gmail.com lotavio@fem.unicamp.br Department of Computational Mechanics, Faculty of Mechanical Engineering, University of Campinas-UNICAMP, 13083970, Campinas, SP, Brazil. Abstract. In solution of several problems it is often necessary optimize functions fetching its minimum or maximum. When these objective functions are continuous, differentiable, without the existence of a large amount of local maximums and local minimums (unimodal), unrestricted, the resolution of the problem is more common, where you can use the analytical methods, and numeric efficient methods to find local critical points. However, in problems which objective function is too irregular, highly discontinuous, restricted and combinatorial, heuristics techniques can be properly applied. In these heuristics techniques, there are methods of brute force, rarely used by the high cost computing, since it required an enormous amount of evaluations about the objective function, to achieve results trustworthy and accurate. In line with recent advances in graphics processing unit (GPU) that enable parallel processing in programming interfaces of general purpose, this present paper presents the implementation of an algorithm capable of evaluating, simultaneously, a huge amount of points of a function, chosen randomly, in order to find the minimum and maximum. To choose points randomly of function domain, an array of number is generated based on Farey series. The characteristic of the process that makes the appropriate method to parallel processing is the possibility of independent evaluation of the domain points. Keywords: Optimization, GPGPU, Parallel programming, Computational heuristic, Pseudorandom number

ou Simulated Annealing (Kirkpatrick et al. deriváveis. as funções podem ser contínuas. sem restrições num domínio contínuo. Um problema interessante. já que métodos deste tipo são eficientes no encontro de mínimos locais (Jones. No entanto. este método trará resultados interessantes somente para um grande número de avaliações sobre a função-objetivo (ver Fig. Diversos métodos de otimização existem na literatura (Jones. uma mesma instrução pode ser executada simultaneamente a uma grande quantidade de dados. Para estes tipos de otimizações mais complexas. Por exemplo. ficando este método restrito a pequenos e simples problemas. com um único ponto de mínimo ou de máximo (unimodal). ou Genetic Algorithm (Zalzala et al.. sob o ponto de vista do processamento paralelo SIMD (Single Instruction Multiple Data). Em geral. No caso de uma função polinomial do tipo f(x) = x² mapeada no intervalo [-5. Um outro exemplo mais complexo e bastante aplicável em logística aparece na solução do problema do “caixeiro viajante”. nos conduzindo a uma solução exata. alguns fornecendo soluções exatas e outros fornecendo soluções aproximadas de alta qualidade. onde diversos pontos do domínio são mapeados “cegamente” em busca de um ponto melhor. o que certamente implicará num elevado tempo computacional para o encontro da solução. com diversos mínimos e máximos locais (multimodal). ou Ant Colony (Dorigo et al. um método de busca local básico tem como objetivo “navegar” interativamente pelo espaço de busca (domínio) pelo menor número de melhores vizinhos que o levem ao ponto ótimo. . Aplicando este conceito a um método de força bruta gerar-e-testar adaptado. buscando-se métodos que encontrem o ponto ótimo de uma função no menor número possível de avaliações da mesma.. poderia nos fornecer uma solução muito boa. combinatórias. num tempo computacional admissível. muitas vezes se requer a otimização de funções-objetivo. algoritmos genéticos. que requer um método de otimização especial aparece quando se deseja encontrar o pico de uma função que representa um sinal ruidoso. no tempo em que um método tipo busca local básico mapeia apenas um de seus vizinhos. não deriváveis. No entanto.1 INTRODUÇÃO Em diversos problemas científicos. Neste sentido o método mais básico de otimização denominado gerar-e-testar (Jones. +5]. 2008) e cada grupo de métodos se aplica a determinados tipos de problemas. o que se verifica é que na modelagem de problemas do cotidiano as funçõesobjetivo não são tão bem comportadas. outras formas e métodos de otimização são requeridos. Dependendo do problema a ser modelado e resolvido.. Para este mesmo problema uma técnica do tipo busca local hill climbing (subir ou descer a montanha). muitas vezes apresentando um custo computacional mais elevado. o algoritmos de busca local estocástica recozimento simulado. tendo como base um algoritmo pensado para um sistema de processamento serial. 2008). a busca pelo ponto de mínimo da função configura um problema relativamente simples quando aplicamos um método analítico. um conjunto de pontos do domínio pode ser mapeado paralelamente e simultaneamente. que utiliza o critério da primeira derivada. as heurísticas para a otimização de funções são implementadas pensando-se num processamento seqüencial (ou serial) das instruções do algoritmo. 2004). com diversas restrições num domínio discreto e combinatório. que requer uma otimização combinatória. de engenharia e empresariais.. como por exemplo. Por exemplo. ou TSP – Traveling Salesman Problem (Iglesias et al. 1983). Sem um critério claro de direcionamento no “passeio” pelo domínio. 14). 2005). ou por outro lado descontínuas. 2008) é raramente utilizado por se tratar de um método de força bruta. as funções podem adquirir diversos formatos. 1997) e colônia de formigas. num tempo computacional relativamente baixo.

onde se espera encontrar uma solução aceitável dentre muitos pontos mapeados. No presente artigo. de forma aleatória. uma unidade de processamento gráfico GPU (Graphics Processing Unit) será utilizada. Uma grande vantagem na utilização deste tipo de processador está no seu preço acessível.. não requerendo a emulação de um cálculo não gráfico sob um cálculo gráfico num hardware gráfico não programável. inaugurando uma nova geração de placas que possibilitam programação paralela de uso geral sob uma interface de programação (API) adequada. ou aleatória como será implementado aqui. um método de força bruta gerar-e-testar paralelo será apresentado. num passado recente (Owens et al. Neste trabalho o ponto ótimo buscado será sempre um ponto de mínimo da função-objetivo. ou parallel and random hill climber method. A obtenção do conjunto de números aleatórios para a escolha dos elementos do domínio será realizada com base na série de Farey. Tendo como objetivo o processamento paralelo os passos que compõem o método são os apresentados na Fig. tomando pontos do domínio. Figura 1 . bem como um valor específico para a função. quando o mesmo é implementado tendo em vista um processamento paralelo. oferecendo a possibilidade de supercomputação para computadores desktop. como implementado por alguns pesquisadores. já que a escolha de todos os pontos do domínio é impraticável objetivando-se um tempo computacional finito e relativamente pequeno. A forma de escolha de um número finito de pontos do domínio pode ser feita de maneira sistemática. configurando uma espécie de método subir ou descer a montanha aleatório e paralelo.Sendo assim. o que irá nos garantir somente. No processo de otimização pode-se buscar um ponto de mínimo ou máximo global. Esta unidade de processamento gráfico integra a as placas de vídeo da fabricante NVIDIA. num tempo computacional admissível. baseada num critério adequado ao problema. uma coleção de números pseudo-aleatórios. Como recurso computacional promissor. 2 O MÉTODO GERAR-E-TESTAR PARALELO ALEATÓRIO O método gerar-e-testar paralelo consiste na escolha de uma porção de pontos do domínio de avaliação e do teste simultâneo da função-objetivo nestes pontos. 2007). uma outra avaliação do método de força bruta gerar-e-testar pode ser feita. 1. para o mapeamento paralelo da função-objetivo. a partir da série GeForce 8.Passos do método gerar-e-testar paralelo .

cujos denominadores não excedam ao termo N.A seguir cada passo do método será descrito com maiores detalhes.1]. A série FN de Farey é o conjunto de todas as frações cujos resultados estão compreendidos entre 0 e 1. criada por Lester R.. 1996).1 A geração de números pseudo-aleatórios Os números pseudo-aleatórios serão obtidos a partir da construção de uma série de Farey (Conway et al. 3. no intervalo [0. temos a série de Farey F6 na Fig. em ordem crescente. 4 ilustra uma belíssima correspondência geométrica para a série F7 de Farey. apresentado na Fig. 1996)..“Árvore” de Stern-Brocot No lado esquerdo da Fig. Figura 3 . 1994). 2. Para termos uma idéia da distribuição dos números da série de Farey. denominado a ordem da série.. sem repetição de valores. 3 encontramos as frações da árvore que compõem as séries de Farey. Ford (Conway et al. buscando esclarecer as principais idéias que nortearão a construção do algoritmo.Série de Farey F6 As séries de Farey também podem ser compreendidas e geradas com base num formato conhecido como a “árvore” de Stern-Brocot (Graham et al. Figura 2 . a Fig. 2. . Como exemplo.

gerando assim um subconjunto do domínio . para os propósitos do método gerar-e-testar a ordem N da série de Farey deverá ser suficientemente grande para que a quantidade de números tomados do domínio possibilite o encontro de um ponto ótimo satisfatório. n projeções da mesma série de Farey podem ser realizadas sobre os n domínios. deve ser encontrada. A Fig. . Como visto no tópico anterior.Círculos de Ford Nesta figura podemos observar os chamados círculos de Ford. estão compreendidos entre 0 e 1. são pontos da série F7 de Farey. 5 mostra a projeção de n elementos compreendidos entre 0 e 1 sobre um domínio compreendido entre 0 e 100. Figura 5 . gerando um subconjunto imagem.2 A escolha aleatória dos pontos no domínio De posse da série de Farey é possível escolher os n elementos do domínio dado . Os pontos do eixo horizontal. Obviamente. 2.Projeção da Série de Farey sobre o domínio Sendo a função-objetivo dependente de n variáveis. o conjunto de números pertencentes à série de Farey. uma proporcionalidade entre a série de Farey e o domínio dado.para que nestes elementos se avalie a função. Para a geração do subconjunto domínio. que tangencia os círculos de Ford.Figura 4 .

Subconjunto de pontos para um domínio bidimensional Vale observar que a explosão combinatória do número total de pontos P a serem mapeados ocorre de maneira exponencial em relação ao número de variáveis v do problema. (1). onde P=n² pontos estão representados. sobre a vizinhança do primeiro mínimo encontrado. onde para n pontos em cada subconjunto das v variáveis o número total de pontos P mapeados pela função-objetivo é dado pela Eq. com o objetivo de melhorar a precisão deste primeiro valor. em busca do ponto ótimo procurado: mínimo (ou máximo.2. . já encontrada. Uma vez encontrado o mínimo valor para a função-objetivo dentre os nv pontos avaliados. A combinação dos pontos dos subconjuntos é feita ponto a ponto. em torno deste primeiro mínimo encontrado. buscar o mínimo valor dentre os elementos deste subconjunto. Figura 6 . basta mapear paralelamente a função-objetivo sobre as combinações destes pontos. Por fim. 6. P = nv (1) Levando-se em conta o método aqui apresentado. realizam-se novas avaliações da função-objetivo numa determinada vizinhança do primeiro mínimo encontrado.3 Testes da função-objetivo e encontro do ponto de mínimo Tendo-se os devidos subconjuntos dos domínios de cada uma das variáveis envolvidas. Para tanto é preciso projetar novamente a matriz de Farey. e por fim. para uma função-objetivo f(x. após a avaliação paralela dos nv pontos do domínio verificam-se os valores encontrados para a função-objetivo.y) tendo apenas duas variáveis (v=2) temos a seguinte situação representada pela Fig. gerando assim um subconjunto imagem. ou um valor específico). Esta vizinhança compreende apenas uma parte do domínio original.

Sendo assim o número total de pontos avaliados TP da função-objetivo é dado pela Eq. ao invés de se “caminhar” serialmente pelo domínio da função passando nos melhores “vizinhos”. à medida que computamos um algoritmo numa GPU com um maior . Nas GPUs NVIDIA cada bloco de threads é computado de maneira paralela em um multiprocessador. respectivamente. onde aplicações de propósito gerais podem utilizar todo o potencial das modernas unidades de processamento gráfico. denominadas threads (Nvidia.Este procedimento pode ser repetido várias vezes em busca de maior precisão para o valor ótimo. 2009) e outras ferramentas capazes de suportar aplicações heterogêneas. denominada global. onde o thread representa cada processo determinado pelo kernel. 2009). são definidos dois outros parâmetros de processamento: NR que determina quantas reavaliações da função serão feitas a fim de melhorar a precisão do resultado. estes procedimentos lembram os métodos de busca local já conhecidos. A arquitetura CUDA trás consigo um compilador denominado nvcc (Nvidia. e NP que determina qual a fração do domínio original deverá ser considerada nas reavaliações subseqüentes. Por sua vez os blocos de threads são organizados em uma grade de blocos. os kernels da GPU devem ser executados sobre dados alocados na memória compartilhada (shared memory). As GPUs capacitadas com a arquitetura CUDA possuem centenas de pequenos núcleos que podem executar coletivamente milhares de pequenas partes independentes do processamento. aqui se avaliam diversos pontos do domínio paralelamente. outras avaliações podem ser realizadas na vizinhança deste primeiro ponto. executadas na CPU (host) e GPU (device). pode-se aplicar paralelamente uma mesma instrução denominada kernel. 2009). onde os “vizinhos” de um suposto ponto compreendem P pontos de todo domínio. Para a programação destas unidades gráficas de processamento será aqui utilizada uma arquitetura computacional denominada CUDA (Compute Unified Device Architecture). 3 A TECNOLOGIA PARA O PROCESSAMENTO PARALELO A tecnologia para processamento paralelo utilizada neste trabalho está baseada num conceito denominado GPGPU (general-purpose computing on graphics processing units). a arquitetura CUDA provê um pequeno conjunto de extensões a algumas linguagens de programação. Na arquitetura CUDA esses threads são organizados em blocos de threads que compartilham dados através de uma memória local compartilhada (shared memory). que permitem a implementação direta de algoritmos paralelos (Nvidia. para utilização em suas GPUs. e de posse de um primeiro mínimo supostamente próximo do mínimo global. com grande velocidade de comunicação de dados. que possuem partes seriais e paralelas. em busca de melhor precisão. No entanto. (2). (2) De certa forma. Para a maior rapidez no processamento paralelo. por conta do baixo custo de comunicação. Basicamente. dentro da GPU. Assim. Assim. Sobre um conjunto de dados alocado na GPU. observando que todos os threads podem acessar uma outra memória da GPU. processados seqüencialmente. como C. TP = NR ⋅ P = NR ⋅ n v . executado sobre um elemento da cadeia de dados. desenvolvida pela NVIDIA. Os kernels são as principais operações realizadas numa GPU. em operações possivelmente paralelas de ponto flutuante sobre vetores e matrizes.

A primeira parte do código é responsável pela geração da série de Farey. 1. com 3GB de memória (DDR2 800). de acordo o item 2. O sistema operacional utilizado é o Microsoft Windows XP Professional. algoritmos paralelos foram implementados para os demais passos do método.3. De todas os passos do algoritmo neste trabalho a parte processada paralelamente na GPU diz respeito ao mapeamento dos dados.3 acima).6 3. O mapeamento de dados acontece na escolha aleatória dos pontos do domínio (tópico 2.2 A plataforma de hardware é composta por um notebook equipado com um processador Intel Core 2 Duo CPU T5670. 4 IMPLEMENTAÇÃO DO ALGORITMO A geração do algoritmo deve contemplar os tópicos descritos no item 2 acima. 2. a ordem dos dados no vetor não precisa respeitar a ordem das frações da série de Farey original. Basicamente.1 16 400 800 600 256MB (DDR2) 64-bit 9.número de multiprocessadores.3. com um total de 8192 registradores. como apresentado na Fig. SP3. Tendo em vista o mapeamento paralelo dos dados. a ordem dos números na série não é importante. um multiprocessador em GPU é constituído por 8 processadores escalares (scalar processor) com 16KB de espaço na memória compartilhada (shared memory). a placa gráfica 8400M GS que integra a série GeForce 8M. Sendo assim. De qualquer forma. . Number of Multiprocessors Compute Capability Stream Processors Core Clock (MHz) Shader Clock (MHz) Memory Clock (MHz) Maximum Memory Memory Interface Memory Bandwidth (GB/sec) Texture Fill Rate (billion/sec) 2 1. alguns testes com estes algoritmos paralelos para as estas demais fases do processamento apresentaram tempos equivalentes aos algoritmos seriais. esta é a parte do código de processamento mais intenso e é neste ponto do método que é possível notar a grande vantagem no uso do processamento paralelo.8GHz.Technical brief: NVIDIA GeForce 8400M GS GPU architecture overview. compondo uma matriz de números pseudo-aleatórios. Tabela 1 . As propriedades desta placa estão descritas na Tabela 1. A versão da arquitetura computacional CUDA é a 2. Os experimentos realizados neste trabalho utilizarão uma das mais básicas GPUs lançadas pela NVIDIA. Contudo. Isto porque. maior será o paralelismo e menor será o tempo total de processamento. com o fato de que estes algoritmos paralelos são ligeiramente mais complexos e trabalhosos.2 acima) e no teste da função-objetivo (tópico 2. versão 2002.

Figura 8 . Fi . (3). Figura 7 . onde os denominadores sempre são maiores que os numeradores. onde os mapeamentos de dados acontecem. O código em C para a geração da série de Farey está explicitado na Fig. Para tanto.nj j n⋅ j (3) Para a retirada das frações repetidas na série de Farey. 7 encontramos uma forma matricial de geração da série de Farey. a parte do algoritmo especialmente apropriada ao processamento paralelo é executada. uma vez que serão colecionadas todas as frações compreendidas entre 0 e 1.Algoritmo para a geração do vetor série de Farey Após a geração do vetor série de Farey. resta apenas eliminar as frações repetidas desta matriz. deve ser inserida no algoritmo uma condição que elimina as frações que possuem o máximo divisor comum (mdc) entre i e j.Matriz de base para o cômputo da série de Farey Tendo que todas as frações abaixo da diagonal da matriz contemplam a condição dos elementos presentes na série de Farey. para todo n inteiro. diferentes de 1. 8 abaixo. como explicita a Eq.Analisando a Fig. notamos que as frações repetidas ocorrem para os múltiplos dos índices das colunas e linhas associadas aos numeradores e denominadores das frações. De acordo . j = i n⋅i = = Fni . Desta forma o valor da divisão (Fij) do índice da coluna i dividido pelo índice da linha j é igual ao valor da divisão do índice da coluna ni dividido pelo índice da linha nj.

10. sendo submetida a quatro algoritmos diferentes: 1º Farey_CPU: Algoritmo que possui todos o código processado no Host (CPU).Algoritmo para a busca do mínimo valor no vetor função 5 EXPERIMENTOS Com o objetivo de verificar a performance do método “gerar-e-testar” paralelo.Representação do mapeamento paralelo dos dados para duas variáveis Para fins de comparação e verificação da eficiência deste método – e em particular dos mapeamentos de dados .o mesmo algoritmo deve ser implementado. 2º Farey_GPU: Algoritmo que processa os mapeamentos de dados . ou sobre a combinação dos vetores de partes dos domínios. 9. uma função-objetivo dependente de duas variáveis será otimizada. como ilustra a Fig.com a Eq.escolha aleatória dos pontos do domínio e teste da função-objetivo. contendo os processos responsáveis pelos mapeamentos processados serialmente em CPU (host). Este algoritmo varre serialmente o vetor guardando o menor valor a cada comparação.no Device (GPU). tendo o restante do processamento no . De posse do vetor que contem os valores testados da função-objetivo um algoritmo para o encontro do valor mínimo no vetor função é executado. no primeiro mapeamento o vetor de dados “aleatórios” (vetor série de Farey) é projetado sobre os domínios das variáveis e depois. Como ilustra a Fig. no demais mapeamentos. Figura 10 . a função-objetivo é mapeada sobre a combinação dos vetores dos domínios. onde os números pseudo-aleatórios são tomados a partir da série de Farey. Figura 9 . de acordo com o método apresentado no item 2 acima. partes que configura os processos de maiores custos computacionais . (2) o mapeamento com maior número de dados ocorre na avaliação da funçãoobjetivo.

11.Random Hill Climber (Zalzala et al. de acordo com o método apresentado no item 2 acima. 1997).. de acordo com o método apresentado no item 2 acima. (4) e será avaliada nos intervalos: x[0. computado totalmente no Host (CPU). Neste trabalho quatro diferentes tamanhos de blocos são utilizados. Farey_GPU_BS8 Com BLOCK_SIZE = 8. da biblioteca padrão da linguagem C. O hardware utilizado está descrito no item 4 acima. Farey_GPU_BS4 Com BLOCK_SIZE = 4. nomeando os seguintes processamentos: Farey_GPU_BS2 Com BLOCK_SIZE = 2. 4º Random_CPU_2: Algoritmo diferente dos anteriores. 100] e y[0. Figura 11 . Farey_GPU_BS16 Com BLOCK_SIZE = 16. onde os números pseudoaleatórios também são tomados a partir da série de Farey. y ) = 15 ⋅ ⎢4 ⋅ cos⎜ ⎟ + 4 ⋅ cos⎜ ⎟ + ⎜ ⎟ ⎥ + 150 ⎟+⎜ ⎝ 3. A função a ser otimizada pelos quatro algoritmos é dada pela Eq. onde avaliações da função-objetivo são sempre realizadas em pontos aleatórios de todo o domínio original. que funciona como o método Simulated Annealing em baixa “temperatura”. computado totalmente no Host (CPU). valor este denominado BLOCK_SIZE.5 ⎠ ⎝ 110 ⎠ ⎝ 4 ⎠ ⎝ 70 ⎠ ⎦ ⎢ ⎥ ⎣ (4) O gráfico desta função está ilustrado na Fig. 100]. Este algoritmo representa uma espécie de método de subir ou descer a montanha aleatório . onde o conjunto de números aleatórios também é gerado utilizando a função rand(). 3º Random_CPU_1: Algoritmo equivalente. Este algoritmo ainda pode ser processado com diferentes tamanhos de blocos de threads. 2 2 ⎡ ⎛ x ⎞ ⎛ x ⎞ ⎛ y⎞ ⎛ y ⎞ ⎤ f ( x.Host (CPU).Gráfico da função-objetivo a ser otimizada . da biblioteca padrão da linguagem C. mas onde o conjunto de números aleatórios é gerado utilizando a função rand().

10 7 9 . tendo o algoritmo Farey_CPU uma pequena vantagem para um maior número de avaliações.800.5 10 7.7 vezes mais tempo para o processamento que o algoritmo Farey_GPU_BS16.independentemente do método.00000623%.02 de processamento. os três algoritmos processados em CPU demandaram.10 7 5 . .10 7 3 .10 7 1 . com um erro de 0.10 8 1.1 .10 7 2 .64 segundos de processamento.10 7 7 . enquanto o melhor método processado em CPU.TP. com um erro de 0.10 8 1.3 . apresentando como resultado o valor 30.6324214935302. 6 RESULTADOS Com base nos 4 algoritmos a função pôde ser otimizada.5 15 Time (s) 12. demandou 2.6324310302734. Farey_GPU_BS16.5 5 2. onde buscaremos um ponto mínimo próximo do mínimo global. O algoritmo Farey_CPU também apresentou um erro relativo 5 vezes maior que o algoritmo Farey_GPU_BS16.10 8 Number Evaluations (-) Farey_CPU Farey_GPU_BS2 Farey_GPU_BS4 Farey_GPU_BS8 Farey_GPU_BS16 Random_CPU_1 Random_CPU_2 Figura 12 .O que se pode observar é que esta a função-objetivo possui diversos mínimos e máximos locais.10 7 4 . De qualquer forma. apresentando como resultado para o mínimo para a função f(x. com o valor de 30. A Fig. O algoritmo Farey_CPU demandou 8.6324234008789. considerando um mínimo melhor para a função.00003113%. 25 22.5 0 0 1 .2 .10 7 8 . basicamente.000 avaliações o melhor método em GPU. demandou 23. no intervalo de avaliação adotado. Farey_CPU. os mesmos tempos de processamento. Com base no gráfico verifica-se que o tempo de processamento cresce linearmente com o número de avaliações da função. Para 122.10 8 1.10 7 6 . Para a elaboração do gráfico cada ponto representa a média de três a cinco processamentos para a mesma configuração. 12 apresenta o gráfico do tempo de processamento de cada um dos métodos em função do número de total de avaliações da função . Eq. que somam 1025 experimentos.y) o valor 30.Gráfico tempo de processamento em função do número de avaliações. (2) .5 20 17. com tempos de processamento diferentes.

Com relação à precisão para o valor do ponto de mínimo da função encontrado. a Fig.Gráfico tempo de processamento em função do tamanho dos blocos de threads (BLOCK_SIZE). de maneira a manter uma justa comparação de tempo. de tal forma que nos dois gráficos é possível verificar a melhor performance do algoritmo Farey_GPU_BS16. Verifica-se que para diferentes valores de BLOCK_SIZE. 8. é preciso observar que o valor de BLOCK_SIZE = 16 configura um half warp. o que ocorre com mais facilidade para um valor de BLOCK_SIZE igual a dois. 2009). Isto ocorre porque valor de BLOCK_SIZE deve obedecer a uma certa relação de divisão para o número de avaliações da função. encontram-se diferentes números de experimentos. Nos dois gráficos é possível verificar que o algoritmo com BLOCK_SIZE igual a dois (Farey_GPU_BS2) demanda os maiores tempos de processamento. No gráfico da Fig. Figura 13 . já que o infinito de números divisíveis por 2 é maior que o infinito de números divisíveis por 4. o que garante vantagens no acesso coalescido à memória global da GPU (Nvidia. . à medida que o valor BLOCK_SIZE cresce menores são os tempo de processamento. 16 etc. 4 e 2. 13 verifica-se ainda que. Também podemos observar que os algoritmos Farey_GPU_BS4 e Farey_GPU_BS8 demandam quase que os mesmos tempos de processamento. o gráfico da Fig. 8. 13 apresenta o tempo de processamento destes algoritmos em função do tamanho dos blocos de threads. Do início para o final da figura temos em ordem: BLOCK_SIZE = 16. No entanto.Para uma avaliação mais cuidadosa a respeito do desempenho dos algoritmos com mapeamento da função-objetivo em GPU. 14 apresenta este valor em função do número de avaliações (number evaluations).

6453 30.10 7 9 .1 .6322 30.Gráfico precisão em função do número de avaliações.2 . A escolha do tamanho do bloco de threads afeta significativamente o desempenho do processamento em GPU. já consolidada . da biblioteca padrão da linguagem C.10 7 8 .6438 30. Os demais algoritmos praticamente encontram o melhor mínimo dentro do domínio de avaliação.6365 30.30.6424 30.10 7 3 . reduzindo expressivamente o tempo de processamento em relação aos processamentos seriais em CPU. Como próximos passos seria interessante investigar uma adaptação do método na otimização problemas combinatórios. já para valores relativamente baixos de avaliação da função objetivo.10 8 1.10 8 N. o problema do “caixeiro viajante” – TSP.10 7 7 .10 7 6 .6409 Minimum (-) 30. como por exemplo.rand(). Como já era esperado o algoritmo Ramdom_CPU_2 passa a encontrar melhores resultados para muitas avaliações.10 7 4 .6307 48 1 .10 7 1 .10 7 2 .10 7 5 . .6351 30.638 30. O método como um todo se mostrou eficiente no encontro de pontos críticos de funções. A utilização da série de Farey como fonte geradora de números pseudo-aleatórios mostrou-se satisfatória.10 8 1. 7 CONCLUSÕES O mapeamento de dados executado paralelamente em GPU revelou-se como uma ferramenta poderosa de computação.6395 30. apresentando resultados equivalentes a uma função geradora de números aleatórios. Evaluations (-) Farey_CPU Farey_GPU_BS2 Farey_GPU_BS4 Farey_GPU_BS8 Farey_GPU_BS16 Random_CPU_1 Random_CPU_2 Figura 14 .6336 30.

pdf Owens. Jr. D.8 BIBLIOGRAFIA Conway. 2004. Marcel Dekker... M. pp.download. E. Luebke. J.. . 2008. 1997. The MIT Press Graham. & Vidal. S. 1994. version 2. The Institution of Electrical Engineers. M. A. Ant Colony Optimization..download. Naudts.. pp. K.com/compute/cuda/2_3/docs/CUDA_Getting_Started_2. The art of Prolog: advanced programming techniques.. http://developer.3.com/compute/cuda/2_3/toolkit/docs/NVIDIA_CUDA_Best PracticesGuide_2.. Dorigo. Computer Graphics Forum. Springer.J. Science. Zalzala.nvidia. version 2. J. H. 1994. O. B. Govindaraju. C. 1983.. Gelatt. & Vecchi... n..pdf Nvidia. 2009. & Guy R. Springer-Verlag.3... Concrete Mathematics. T. A. http://developer. R.. N. version 2. T.3. The Book of Numbers. J. & Shapiro. Artificial intelligence: a systems approach. Jones..nvidia.. C. 2009.. 1..3. CUDA Programming guide. M. (2007). M. n. Optimization by Simulated Annealing.. C. A. 2005.. 220. CUDA Reference Manual. D. Foundations of generic optimization: Volume 1: a combinatorial approach to epistasis.com/compute/cuda/2_3/toolkit/docs/NVIDIA_CUDA_Prog ramming_Guide_2. Methods and tools for applied artificial intelligence.pdf Nvidia.. CUDA Getting started. P.download. version 2. P. CUDA Best pratiques guide. Iglesias. The MIT Press.. & Patashnik. Verschoren. vol.3. Nvidia. D. C.. Kirkpatrick. 1994. Harris. Krüger. V.nvidia. 26. & Stützle. Genetic algorithms in engineering system. D. 80-113. http://developer. Infinity Science Press. T.com/compute/cuda/2_3/toolkit/docs/CUDA_Reference_Ma nual_2.. 2009.3_ Windows. & Fleming. http://developer. J. 1996.. Knuth. Popovic.3. D. L.. 671-680. 2009. vol.download. C. & Bhatkar. M. E. C. Lefohn.nvidia.pdf Nvidia. S. P.. M. A survey of general-purpose computation on graphics hardware. & Purcell. Sterling. Addison-Wesley. 4598.3.