Você está na página 1de 5

Paralelização do KDE usando OpenMP

Renan Procópio1 , Khiara Shantala2


Orientadores: Raul Sena3 , Marcelo Zamith4
1
Departamento de Ciência da Computação –
Universidade Federal Rural do Rio de Janeiro (UFRRJ)
R. Governador Roberto Silveira S/N – Nova Iguaçu –
Rio de Janeiro – RJ – Brasil
zamith.marcelo@gmail.com, raulsenaferreira@gmail.com

khiara.shantala@gmail.com, renan procopio@live.com

1. Introdução
O propósito de um teste estatı́stico é verificar se os dados recolhidos de duas ou
mais amostras são equivalentes e, além disso, determinar as possibilidades de quaisquer
diferenças entre elas serem devidas a flutuações ocasionais. Estes testes podem ser pa-
ramétricos e não paramétricos.
A estimativa de densidade kernel (KDE) é uma forma não paramétrica, i.e., as-
sume pouca ou nenhuma hipótese sobre a distribuição de probabilidade da população da
qual os dados foram retirados, para estimar a função de densidade de probabilidade de
uma variável aleatória [Sheather et al. 2004].
O KDE tornou-se um método muito conhecido por ser uma poderosa ferramenta
para ser aplicada em análise de dados. O KDE tem apresentado resultados relevantes para
várias aplicações como por exemplo análise de marketing, análise de aplicações bancárias
[Tortosa-Ausina 2002], arqueologia [Baxter et al. 2000] e em técnicas de aprendizado de
máquinas [Fukunaga and Hostetler 1975, DiNardo et al. 1995], entre outros.
Entretanto, o problema do KDE é que o custo computacional para calculá-lo au-
menta à medida que a quantidade de dados disponı́vel também aumenta. O conjunto
de dados tem aumentado muito nos últimos anos principalmente pelo uso do KDE em
modelos mais complexos de econometria e na proposta de técnicas de estimativas mais
sofisticadas, exigindo assim um alto tempo computacional em sua solução.
Uma alternativa para satisfazer a demanda computacional do KDE é utilizar pa-
radigmas de programação paralela. A ideia é dividir o problema em problemas meno-
res que sejam capazes de serem executados em unidades de processamento independen-
tes. Alguns trabalhos apresentam alternativas de paralelização da técnica KDE, como em
[Michailidis and Margaritis 2013, Racine 2002].
A implementação proposta neste trabalho utilizou o OpenMP
[Dagum and Menon 1998] como estratégia de paralelização e conseguiu um speed
up bem próximo do speed up teórico na implementação com 4 threads.
Estes trabalho está organizado da seguinte forma: Na seção 2, é descrito o pro-
blema e o objetivo, assim como trabalhos relacionados; na seção 3, é apresentada qual foi
a metodologia utilizada; na seção 4, é onde são apresentados os experimentos e resultados
e por fim, na seção 5 uma breve conclusão sobre o trabalho.
2. Problema e Objetivo
Uma análise de dados tem se tornado essencial já que nas últimas duas décadas
grandes quantidades de dados tem sido armazenados. Estes dados são gerados diaria-
mente por sistemas de informação, internet, redes sociais, etc. Estes dados podem conter
padrões usuais para aplicações como detecção de fraude, recomendação de conteúdo,
análise de DNA, entre outros [Sheather et al. 2004].
Técnicas de aprendizado de máquina e mineração de dados são normalmente uti-
lizados para descoberta de padrões em grandes bases de dados. Em aprendizado de
máquina, aprendizado ativo consiste em um framework de técnicas para selecionar as
observações mais significativas, ou seja, mais informativas, para serem rotuladas ou para
que seja gerado um conjunto de treinamento que pode ser utilizados por modelos de apren-
dizado supervisionado. Dentre estas técnicas o Kernel Density Estimation (KDE) que é
uma forma não paramétricas para estimar a função de densidade de probabilidade se po-
pularizou muito.
Contudo, a desvantagem do KDE é que apresenta um alto custo computacional
dependendo da quantidade de dados. O KDE é da ordem O(n2 k), onde n é o número de
observações e k é o número de variáveis. Com o aumento das bases de dados analisadas
atualmente, pesquisadores têm proposto a execução paralela do KDE com o intuito de
melhorar o desempenho computacional da técnica.
Ambientes de sistemas computacionais para executar aplicações paralelas po-
dem ser: clusters de workstations, plataformas multicores ou Graphics Processing Units
(GPUs).
Neste trabalho a escolha de plataforma de paralelização foi a de plataformas mul-
ticores, onde o problema a ser trabalhado tem sua carga dividida entre os núcleos de
processamento da máquina computacional. Em plataformas multicore o paralelismo é ba-
seado em programação multithreading, utilizando Posix Threads, OpenMP, entre outros.
O OpenMP é uma interface de programação de aplicativo (API) para a
programação multi-processo de memória compartilhada em múltiplas plataformas. O
OpenMP é um modelo de programação portável e escalável que proporciona aos progra-
madores uma interface simples e flexı́vel para o desenvolvimento de aplicações paralelas
para as plataformas que vão dos computadores de escritório até os supercomputadores
[Dagum and Menon 1998].
Portanto, o objetivo do trabalho é realizar uma implementação paralela do KDE
utilizando o paradigma multicore utilizando a API OpenMP com o intuito de melhorar o
desempenho computacional da estimativa de densidade kernel.

3. Proposta
O KDE tem duas abordagens, uma univariante, onde só há uma dimensão a ser
analisada, e multivariante, onde existem k dimensões. Como em aplicações reais, em ge-
ral, consta mais de uma dimensão, foi implementada a versão multivariante do algoritmo.
Através da utilização do paradigma de programação paralela, i.e., dividir o pro-
blema em problemas menores e executá-los de forma independente, foi concebido um
algoritmo com abordagem paralela ao problema de Kernel Density Estimation que utiliza
a linguagem de programação C e a extensão OpenMp.
A seguir segue o pseudo código da implementação do algoritmo KDE multivari-
ante com as diretivas utilizadas no OpenMP (em highlights).

Algorithm 1 Implementação do Algoritmo KDE Multivariante em OpenMP


Data: Data, Observation, h
Result: pdf
#pragma omp parallel for private (i, j, k)
for i ← 0 to n do
soma ← 0.0
for j ← 0 to n do
produto ← 1.0
for k ← 0 to k do
#pragma omp atomic
produto ← produto * kernel((Data[k * n + i] - Observation[k * n +
j])/h)/h
end
#pragma omp atomic
soma ← soma + produto
end
pdf [i] ←soma/n
end

Onde Data são os dados de entrada, o Observation é os dados sobre o qual a


função de densidade de probabilidade será calculada, kernel é a função de densidade
Gaussiana e h é a janela de Parzen e pdf é o resultado do KDE de Data sobre Observation.

4. Experimentos
O KDE é dependente de uma parâmetro chamado janela de Parzen, que é basi-
camente um valor que controla a granularidade, ou seja, qual a influência que os dados
adjacentes exercem sobre o dado o qual está sendo calculada a função de densidade de
probabilidade. A janela de Parzen é um parâmetro a ser configurado, ela pode ser calcu-
lada a partir de funções.
Todavia essas funções são da ordem de O(n2 ) o que é custoso computacional-
mente. Logo, esses métodos não foram utilizados neste trabalho. A janela de Parzen
neste trabalho foi determinada empiricamente, e analisada a partir de testes realizados
para uma melhor ajuste.
O conjunto de dados utilizado foram de imagens livres disponı́veis em
https://pixabay.com/. Portanto, a configuração do KDE foi de k igual a 3 (dimensões
da imagem: Red, Green, Blue) e o n é definido como o tamanho da imagem. As imagens
foram transformadas em matrizes tridimensionais a partir de um script escrito em MatLab
c
.
A métodos de comparação foi utilizado o algoritmo do KDE sequencial como
baseline, e a implementação proposta neste trabalho, a do KDE Paralelo em OpenMp,
a qual foi executada com 4 e 8 threads. A seguir na tabela 1, é apresentado o tempo
KDE OpenMP
Instancia KDE Sequencial
4 threads 8 threads
64 4,361 sec 1,218 sec 0,712 sec
128 68,961 sec 18,717 sec 11,509 sec
256 1.103,492 sec 297,510 sec 182,247 sec
512 17.533,432 sec 4.769,530 sec 2.883,028 sec
Tabela 1. Tempo computacional das implementações do KDE

computacional gasto, em segundos, para a execução das implementações do algoritmo


KDE.
A partir da análise desta tabela pode-se verificar que o speed up alcançado pe-
las implementações paralelas foram satisfatórios se levado em conta o speed up teórico
máximo, que seria de 4 unidades de speed up no caso da implementação com 4 threads e,
um speed up de 8 unidades considerando-se a implementação com 8 threads. A seguir é
apresentada uma tabela 2 com os speed ups para cada tamanho de instância testadas.

Instancia Speed up com 4 threads Speed up com 8 threads


64 3,580 6,125
128 3,684 5,992
256 3,709 6,055
512 3,676 6,082
Tabela 2. Speed up alcançado em cada instância

Todos os testes foram realizados em um ambiente computacional que conta com


TM
um processador Quad Core com tecnologia Hyper Threading, Intel
c
Core i7-3770 CPU
@ 3.40GHz com cache L1 de 4 x 32 KB, cache L2 de 4 x 256 KB, e cache L3 de 8MB; 12
GB de Memória RAM DDR3; e sistema operacional Linux 64 bits, com Kernel 4.8.0-53.

5. Conclusões

Este trabalho teve como intuito tornar o KDE um método de uso computacional
aceitável. Como sua complexidade não pode ser alterada, o objetivo foi reduzir o tempo
computacional uma vez que a quantidade de dados está aumentando de maneira constante.
Para atingir tal proposta, foi aplicado o paradigma de programação paralela ba-
seado em multicores. A utilização deste paradigma na implementação foi por meio do
OpenMP, que é uma diretiva de compilação para a linguagem de programação C/C++.
Como pode ser observado ao analisar a tabela 1, o tempo computacional gasto teve
um declive acentuado, utilizando uma instância de 512 ∗ 512 o tempo gasto na execução
do algoritmo caiu de 292 minutos para 48 minutos e, ao observar a tabela 2, pode-se
constatar que a taxa de speed up ficou bem próxima da taxa de speed up teórico no caso
da implementação utilizando 4 threads.
Referências
[Baxter et al. 2000] Baxter, M., Beardah, C., and Westwood, S. (2000). Sample size and
related issues in the analysis of lead isotope data. Journal of Archaeological Science,
27(10):973–980.
[Dagum and Menon 1998] Dagum, L. and Menon, R. (1998). Openmp: an industry stan-
dard api for shared-memory programming. IEEE computational science and enginee-
ring, 5(1):46–55.
[DiNardo et al. 1995] DiNardo, J., Fortin, N. M., and Lemieux, T. (1995). Labor market
institutions and the distribution of wages, 1973-1992: A semiparametric approach.
Technical report, National bureau of economic research.
[Fukunaga and Hostetler 1975] Fukunaga, K. and Hostetler, L. (1975). The estimation of
the gradient of a density function, with applications in pattern recognition. IEEE Tran-
sactions on information theory, 21(1):32–40.
[Michailidis and Margaritis 2013] Michailidis, P. D. and Margaritis, K. G. (2013). Accele-
rating kernel density estimation on the gpu using the cuda framework. Applied Mathe-
matical Sciences, 7(30):1447–1476.
[Racine 2002] Racine, J. (2002). Parallel distributed kernel estimation. Computational Sta-
tistics & Data Analysis, 40(2):293–302.
[Sheather et al. 2004] Sheather, S. J. et al. (2004). Density estimation. Statistical Science,
19(4):588–597.
[Tortosa-Ausina 2002] Tortosa-Ausina, E. (2002). Financial costs, operating costs, and spe-
cialization of spanish banking firms as distribution dynamics. Applied Economics,
34(17):2165–2176.

Você também pode gostar