UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO ANÁLISE COMPARATIVA DE ALGORITMOS NP-COMPLETO EXECUTADOS EM CPU E GPU UTILIZANDO CUDA por Elcio Arthur Cardoso Itajaí (SC), novembro de 2012 UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO ANÁLISE COMPARATIVA DE ALGORITMOS NP-COMPLETO EXECUTADOS EM CPU E GPU UTILIZANDO CUDA Área de Computação Paralela GPGPU por Elcio Arthur Cardoso Relatório apresentado à Banca Examinadora do Trabalho Técnico-científico de Conclusão do Curso de Ciência da Computação para análise e aprovação. Orientador: Rafael de Santiago, M.Sc Itajaí (SC), novembro de 2012 À Lúcia Cardoso, minha querida mãe. AGRADECIMENTOS Agradeço primeiramente a Deus por me dar sanidade e força suficiente para alcançar as minhas metas e objetivos de vida. A minha família, minha mãe Lúcia Cardoso, por acreditar no meu potencial e investir em meus estudos e minha avó Venina P. Cardoso que passou esses anos aturando meus momentos de estresse. A minha companheira Flânery Demarche Fumagalli, por entender meus momentos de ausência durante a realização deste trabalho e pela força dada nos bons e maus momentos. A todos os mestres que puderam me passar um pouco do seu conhecimento neste período, em especial ao professor e amigo Rafael de Santiago, que fez total diferença no desenvolvimento e resultado final deste projeto. Aos amigos de curso pela ajuda fornecida durante toda nossa formação e pela rica troca de conhecimentos, em especial ao Alexandre Corsi, Cristiano Elias, Filipe Bernardi, Paulo Eduardo Krieger, Marcus Simas e Matheus Weber da Conceição. Agradeço também ao amigo Willian Da Silva que emprestou sua NVIDIA GeForce GTX 670 utilizada nos testes deste trabalho e ao Tiago Carneiro que me ajudou com algumas dúvidas em relação a arquitetura CUDA. Agradeço ainda aos amigos de trabalho da H2K e SRSul, que de alguma forma puderam contribuir para conclusão deste. A todos o meu sincero muito obrigado! “Eu tenho uma porção de coisas grandes prá conquistar e eu não posso ficar aí parado...” Raul Seixas – “Ouro de Tolo” RESUMO CARDOSO, Elcio Arthur. Análise comparativa de algoritmos NP-Completo executados em CPU e GPU utilizando CUDA. Itajaí, 2012. 84 f. Trabalho Técnico-científico de Conclusão de Curso (Graduação em Ciência da Computação) – Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2012. A busca constante por maior poder computacional, sempre esteve presente na computação. Atualmente, limites físicos de aumento de frequência das CPUs levaram à criação de arquiteturas paralelas compostas por milhares de unidades de processamento como ocorre nas arquiteturas das GPUs. O presente projeto tem como objetivo utilizar este poder computacional para resolver problemas incluídos na classe NP-Completo, problemas estes que apresentam uma taxa de crescimento em tempo de execução exponencial, podendo levar anos para serem resolvidos. O projeto também pretende posicionar a arquitetura utilizada pela fabricante NVIDIA em suas GPUs, CUDA, em relação a estes problemas. O trabalho foi fundamentado em livros, pesquisas acadêmicas e artigos científicos através dos quais foram desenvolvidos algoritmos para resolução dos problemas Clique Máximo do Grafo e Cobertura Mínima de Vértices, programados sequencialmente para serem executados em CPU onde foram analisados e comparados com a implementação em CUDA, que buscou paralelizar os cálculos feitos para atingir a solução dos problemas da forma mais eficiente possível. Para uma árvore de backtracking, os algoritmos sequenciais abordam nó a nó e apresentam uma taxa de crescimento exponencial representada pela complexidade de tempo O(n²), porém, neste trabalho, os algoritmos paralelos em CUDA buscaram abordar cada nível da árvore paralelamente em apenas uma unidade de tempo para assim reduzir o tempo total da execução do algoritmo, simulando o dispositivo teórico dos algoritmos não determinísticos. Esta solução não pode ser utilizada devido ao uso exponencial de memória o que levou a busca de soluções alternativas para o desenvolvimento dos algoritmos. A primeira solução foi paralelizar as operações feitas com os vetores, porém não obteve bons resultados, na qual foi apresentada uma nova solução, onde os grafos foram divididos em “n” subgrafos, para “n” igual ao número de vértices, e esta por sua vez se mostrou bastante eficiente na arquitetura CUDA. Palavras-chave: CUDA. NP-Completo. Computação Paralela. ABSTRACT Constant researches for high-performance computing, which has existed since the firsts calculating machines to modern current computers and physical limitations of CPUs frequency increases, led to the creation of parallel architectures composed of thousands of processing units as occur in the GPUs architectures. This project aims to use this high- performance computing to solve problems in class NP-Complete, problems that have a growth rate in exponential runtime, which can take years to been solved. The project also aims to position the architecture used by the manufacturer of NVIDIA GPUs, CUDA, in relation to these problems. The work was based on books, academic research and scientific papers and algorithms for solving the Maximum Clique of a Graph and Minimum Vertex Cover, that have been sequentially developed to run on CPU in order to be analyzed and compared with the CUDA implementation, which tried to parallelize the calculations to achieve the solution of problems as efficiently as possible. In backtracking algorithms, a sequential approach travels node by node and have an exponential growth rate that is represented by the complexity function O(n²), but in this work, a parallel CUDA version of the algorithms tried to solve each level of the tree in parallel on a single time unit to reduce the total execution time of the algorithm, simulating the theoretical device of non-deterministic algorithms. This solution can not be used due to exponential memory usage which prompted the search for alternative solutions to the development of algorithms. The first found solution was made by parallelizing the operations with arrays, but did not get good results, in which was presented a new solution, where the graphs were split into “n” subgraphs, for “n” equals to the number of vertices, and this solution showed efficient results in the CUDA architecture. Keywords: CUDA. NP-Complete. Parallel Computing. LISTA DE FIGURAS Figura 1. Entradas de pior e melhor caso para algoritmos de ordenação ................................. 22 Figura 2. Lógica do Algoritmo Insertionsort ............................................................................ 23 Figura 3. Taxa de crescimento polinomial (7n3+5) e exponencial (2n) .................................... 24 Figura 4. Classes P, NP e NP-Completo (se P diferente de NP) .............................................. 25 Figura 5. Árvore para um algoritmo determinístico ................................................................. 26 Figura 6. Árvore para um algoritmo não determinístico .......................................................... 26 Figura 7. Grafo G com os vértices s e t .................................................................................... 28 Figura 8. Possibilidades da relação P e NP .............................................................................. 30 Figura 9. Grafo G com o Caminho Hamiltoniano .................................................................... 31 Figura 10. Transformação polinomial do problema X no problema Y .................................... 32 Figura 11. K-clique de tamanho 4 ............................................................................................ 33 Figura 12. Clique Máximo do grafo ......................................................................................... 34 Figura 13. Coberturas de Tamanho K ...................................................................................... 34 Figura 14. Cobertura Mínima de um Grafo .............................................................................. 35 Figura 15. Taxonomia de Flynn ............................................................................................... 36 Figura 16. Distribuição dos transistores em CPUs e GPUs ...................................................... 41 Figura 17. Arquitetura CUDA .................................................................................................. 42 Figura 18. Memórias da arquitetura CUDA ............................................................................. 45 Figura 19. Execução de um programa de computação paralela ............................................... 47 Figura 20. Árvore element e step complexity ........................................................................... 48 Figura 21. Tempo de execução na CPU e GPU ....................................................................... 51 Figura 22. Desempenho do problema da mochila .................................................................... 51 Figura 23. Tempo mínimo, médio e máximo das execuções do Caixeiro Viajante ................. 53 Figura 24. Taxa mínima, média e máxima de ganho de velocidade ........................................ 53 Figura 25. Grafo exemplo e os conjuntos V, A e B ................................................................. 57 Figura 26. Árvore de backtracking ........................................................................................... 58 Figura 27. Árvore de chamadas da função MaxClique ............................................................ 59 Figura 28. Estratégia inicial de NP-Completo em CUDA........................................................ 63 Figura 29. Função vértices por megabytes de memória utilizados na estratégia inicial .......... 64 Figura 30. Caminhos e chamadas exponenciais dos kernels .................................................... 64 Figura 31. Divisão do grafo em n subgrafos ............................................................................ 66 Figura 32. Resultados da execução do clique do grafo ............................................................ 70 LISTA DE QUADROS Quadro 1. Algoritmo não determinístico de busca em vetor .................................................... 27 Quadro 2. Exemplo da chamada de um kernel ......................................................................... 44 Quadro 3. Kernel N blocos com 1 thread ................................................................................. 44 Quadro 4. Kernel 1 bloco com N threads ................................................................................. 44 Quadro 5. Penalidade de acesso à memória ............................................................................. 46 Quadro 6. Complexidade step e elemento dos algoritmos ....................................................... 49 Quadro 7. Quadro comparativo dos trabalhos similares........................................................... 54 Quadro 8. Logica MaxClique ................................................................................................... 56 Quadro 9. Lógica CobMin ........................................................................................................ 60 Quadro 10. Cópia de vetor na CPU .......................................................................................... 65 Quadro 11. Cópia de vetor na GPU para N threads ................................................................. 65 Quadro 12. Grafos utilizados para teste.................................................................................... 69 Quadro 13. Resultados da execução do clique do grafo ........................................................... 71 Quadro 14. Algoritmo Clique Máximo do Grafo - Função MaxClique ................................... 78 Quadro 15. Algoritmo Cobertura Mínima de Vértices - Função CobMin ............................... 79 Quadro 16. Algoritmo Cobertura Mínima de Vértices - Função getCoberturaAtual ............... 80 Quadro 17. Algoritmo Paralelizando Operações do Clique Máximo do Grafo em CUDA ..... 82 Quadro 18. Algoritmo Subgrafos do Clique Máximo do Grafo em CUDA ............................ 84 LISTA DE EQUAÇÕES Equação 1 ................................................................................................................................. 59 Equação 2 ................................................................................................................................. 59 Equação 3 ................................................................................................................................. 61 Equação 4 ................................................................................................................................. 61 Equação 5 ................................................................................................................................. 63
Description: