Algoritmo de Regras de Associação Paralelo para Arquiteturas Multicore e Manycore

Association rules are specific techniques to find simultaneous occurrence of frequent items in a non-numeric database. Among the most widespread techniques, Apriori algorithm stands out for being used for market basket analysis as well as the prediction of scheduling policies on parallel architectures. However, Apriori demands high computational cost. In this paper we developed and evaluated a parallel version of the Apriori algorithm in OpenMP exploring the computational power of multicore and manycore architectures. The experimental results show that the parallel Apriori achieves a performance gain of up to 10x on a multicore also on a manycore. Resumo. Regras de associação são técnicas específicas para encontrar ocorrências simultâneas de itens frequentes em uma base de dados não-numéricos. Dentre as técnicas mais difundidas, o algoritmo Apriori se destaca por ser utilizado tanto para a análise de cesta de compras como também para a predição de políticas de escalonamento em arquiteturas paralelas. Contudo, o Apriori demanda alto custo computacional. Neste artigo é desenvolvida e avaliada uma versão paralela do algoritmo Apriori em OpenMP que explora o poder computacional das arquiteturas multicore e manycore. Os resultados experimentais mostram que o Apriori paralelo alcança um ganho de desempenho de até 10x em uma arquitetura multicore e também em um manycore. 1. Introdução O Apriori [Rao and Gupta 2012] é um algoritmo de regras de associação amplamente utilizado para encontrar padrões frequentes em grandes bases de dados não numéricas. Ele vem sendo utilizado em diversas áreas tais como bioinformática, diagnóstico médico, análise de dados científicos e até em escalonamento de processos em máquinas paralelas [Castro et al. 2014]. Esse algoritmo demanda alto desempenho computacional, devido ao seu grande espaço de busca envolvendo a geração dos candidatos de conjuntos de itens frequentes. Com o advento de arquiteturas multicore e manycore [Borkar 2007, Hill and Marty 2008], aplicações que executam sobre grandes quantidades de dados, como o Apriori, devem ser implementadas por meio de ferramentas de ∗Aluno de iniciação científica. programação paralela para alcançarem alto desempenho computacional. O OpenMP é uma destas ferramentas que provê diretivas de compilação que auxiliam o compilador na paralelização de um código sequencial [Klemm and Terboven 2013]. Além de simplificar a programação paralela, o código OpenMP pode ser executado tanto em arquiteturas multicore quanto em arquiteturas manycore como o Intel Xeon Phi. O objetivo deste trabalho é a implementação paralela e avaliação de desempenho do algoritmo Apriori para arquiteturas multicore e manycore. Os resultados experimentais mostram que o Apriori paralelo alcança um ganho de desempenho de até 10x em uma arquitetura multicore e uma manycore. O restante deste trabalho está dividido em 5 seções, incluindo esta introdução. A seção 2 apresenta o algoritmo Apriori Paralelo. A seção 3 apresenta a configuração dos experimentos e os resultados experimentais. A seção 4 apresenta os trabalhos relacionados e a seção 5 apresenta as conclusões e trabalhos futuros. 2. Apriori Paralelo Dada uma lista de conjunto de itens, o algoritmo Apriori identifica as regras de associação entre estes itens baseado em suas frequências. Essas regras revelam os subgrupos de itens que ocorrem juntos em um mesmo conjunto de itens frequentes [Rao and Gupta 2012]. O algoritmo segue a regra: para todo conjunto de itens não vazio seus subconjuntos de itens devem ser frequentes também. Essa regra permite que o algoritmo elimine todo conjunto de itens que não é composto por um subconjunto de itens frequentes, reduzindo significativamente o espaço de busca. Para cada regra de associação A → B, onde A e B são subconjuntos dos itens de um conjunto de itens frequentes, o algoritmo Apriori calcula a confiança (Conf), apresentada na equação 1, sendo o suporte, o número mínimo de ocorrências de um subconjunto de itens para que ele seja considerado frequente. Quanto maior o nível de confiança, significa que: com a presença de um subconjunto de itens A em um conjunto de itens frequentes, maior é a probabilidade do subconjunto de itens B também estar presente. Conf(A,B) = suporte(A ∧B)