230 likes | 301 Views
Uma Análise das plataformas CUDA e OpenCL usando MetaHeurísticas aplicadas no Problema do Caixeiro Viajante. Aluno: Hedley Luna Gois Oriá Disciplina: Introdução a Pesquisa Científica Prof. Jeandro. Organização. Introdução a Computação Paralela CUDA OpenCL Caixeiro Viajante Metaheurísticas.
E N D
Uma Análise das plataformas CUDA e OpenCL usando MetaHeurísticas aplicadas no Problema do Caixeiro Viajante Aluno: Hedley Luna Gois Oriá Disciplina: Introdução a Pesquisa Científica Prof. Jeandro
Organização • Introdução a Computação Paralela • CUDA • OpenCL • Caixeiro Viajante • Metaheurísticas
Computação Paralela • Computação paralela é uma forma de computação em que vários cálculos são realizados simultaneamente! • A Computação paralela já é usada há vários anos na computação de alto desempenho! • Geralmente é usada para resolver problemas matemáticos supercomplexos. • Quando não é mais possível melhorar o hardware, usa-se a computação paralela. • A recente preocupação com o consumo de energia fez com que a computação paralela tivesse um “boom”.
Continuação.... • Tipos de Arquiteturas Paralelas: Multiprocessadores,Multicomputadores e Clusters. • Tipos de Paralelismo: No Bit,Na Instrução,No Dado e Na Tarefa. • A programação paralela é geralmente implementada através de trocas de mensagens entre os núcleos. Exemplo: OpenMP e MPI. • O grande problema da computação paralela se dá na complexidade da implementação! • Mais recentemente nasceu uma(mais uma) plataforma de programação paralela: a CUDA. • A mais nova plataforma para a programação paralela é a OpenCL.
CUDA • CUDA = Compute Unified Device Architecture. • Propriedade da Nvidia. • GPGPU • Computação Heterogênea • CUDA provê suporte para até 100 núcleos de processamento! E mais de 1000 threads!(E isso vai aumentar!) • A série TESLA.
Continuação... • A única linguagem atualmente suportada pelo CUDA é o C, mas futuramente também C++ e Fortran. • A partir das novas placas, de codinome Fenri, o C++ já será suportado. • Os códigos paralelisados usando o CUDA serão executados em um dispositivo através de várias threads. • Threads. • Blocos. • Cada thread executa apenas uma parte do código. • As threads podem(e devem) ser sincronizadas durante a execução do programa, visando um ganho maior de eficiência.
Continuação... • O CUDA usa memória compartilhada entre as threads. • Entretanto, por questões de segurança, thereads de blocos diferentes não se comunicam. • O desenvolvedor não precisa de preocupar em gerenciar as threads. • Pode ser usada em conjunto com OpenMP e MPI. • A comunicação entre as GPU’s.
OpenCL • OpenCL (Open Computing Language) • Primeira plataforma paralela totalmente free! • Várias empresas dão suporte ao OpenCL, entre elas, Nvidia e ATI(AMD). • Mais nova plataforma, algumas bibliotecas ainda serão lançadas. • Ao contrário do CUDA, o OpenCL é suportado tanto nas Nvidia quanto nas ATI. • O OpenCL já permite o uso nativo do C++.
Continuação.. • GPGPU • Gerenciamento de Threads é transparente. • Computação Heterogênea. • O OpenCL ainda não possui compilador próprio, ao contrário do CUDA. • O OpenCL é um “irmão” do CUDA, pois os códigos escritos são muito parecidos.
Caixeiro Viajante • O problema consiste em visitar todas as cidades em um dado circuito sem que cada cidade seja visitada mais de uma vez, com o menos trajeto possível. • É o problema mais explorado na área da computação. • É um problema de combinatória. • Tem aplicações nas áreas de logística,genética,produção e outros. • É um problema de complexidade NP-Hard.
Continuação.. • Se tivermos, n cidades, teremos (n-1)! rotas diferentes! Por isso, mesmo problemas pequenos são extremamente difíceis.
Metaheurísticas • Metaheurísticas são estratégias de alto nível para explorar espaços de busca usando diferentes métodos de resolução visando um balanço entre diversificação e intesidade de procura no espaço escolhido. • Exemplos de metaheurísticas: Algoritmo Genético,Otimização da Colônia de Formigas,Simullated Annealing,Tabu Search e etc.
Continuação... • A melhor forma de tentar resolver o problema do caixeiro viajante em um tempo computacional viável é a utilização das metaheurísticas, pois, apesar delas não apontarem a melhor solução(geralmente), chegam muito próximo disso em bem menos tempo. • O grande problema das metaheurísticas é que, se mal implementadas, não fornecem uma solução de alta qualidade, pois o algoritmo pode parar em um ótimo local.
Obrigado Pela Paciência • Se alguem não tiver dormido ainda, pode perguntar alguma coisa. • =D