Você está na página 1de 2

AVALIANDO O USO DE SECTIONS OPENMP NA PARALELIZAÇÃO DE

UM ALGORITMO GENÉTICO
Gabriella Lopes Andrade(1), Márcia Cristina Cera(2)
(1) Estudante; Universidade Federal do Pampa – Campus Alegrete; Rio Grande do Sul; gabie.lop.s@gmai.com;
(2) Orientadora; Universidade Federal do Pampa – Campus Alegrete; Rio Grande do Sul; marciacera@unipampa.edu.br.

Palavras-Chave: Desempenho, OpenMP, Rastreamento, Score-P, Vampir.

INTRODUÇÃO

Uma das dificuldades no desenvolvimento de aplicações paralelas é explorar todo o paralelismo das
arquiteturas com múltiplas unidades de processamento (PACHECO, 2011). Logo, após a paralelização, faz-
se necessário uma profunda análise para prover ajustes finos na aplicação e assim obter alto desempenho.
Esse trabalho utiliza rastros de execução (SCHNORR, 2014) para analisar o desempenho da
paralelização de um Algoritmo Genético (AG) aplicado ao Problema de Roteamento de Veículos (PRV)
desenvolvido por Gressler e Cera (2014). O PRV é um problema que consiste em rotear veículos com uma
certa capacidade de transporte para atender as requisições de um grupo de cidades. A solução compreende
um conjunto de rotas capazes de satisfazer a demanda de todas as cidades e cujo somatório seja mínimo.
Entre os métodos propostos para solucionar o PRV, o AG foi o escolhido por Gressler e Cera (2014)
por obter bons resultados quando aplicado a problemas que não possuem uma técnica especializada para
resolvê-los. No AG, cada possível solução do PRV é codificada em uma estrutura chamada de indivíduo,
que compõe a população inicial. Cada indivíduo é aplicado ao processo de evolução, que envolve avaliação,
seleção, cruzamento e mutação. Após vários ciclos de evolução a população final deve conter os indivíduos
mais aptos. Para reduzir o tempo de computação do AG foi realizada a paralelização do mesmo, utilizando
Sections e Parallel for do OpenMP (CHAPMAN et al., 2008). A região paralelizada com Sections
possui 2 blocos de código que podem ser executados em paralelo e não possuem tarefas iterativas. Dessa
forma, cada bloco fica dentro de uma Section e cada Section é executada por uma thread diferente.
Neste caso, como são 2 blocos de código, as tarefas de cada bloco serão sempre executadas por 2 threads.
Logo, nosso objetivo é avaliar o impacto do uso das Sections em arquiteturas com mais de 2 núcleos.

METODOLOGIA

Para avaliar o impacto do uso das Sections, iremos rastrear as execuções do AG paralelo com e
sem o uso de Sections. Foram utilizadas as instâncias c50 e c100 do PRV, pertencentes ao Benchmark
de Christofides et al. (1979), que consistem em percursos com 50 e 100 cidades respectivamente.
Baseando-se em Gressler e Cera (2014), identificou-se os parâmetros do AG que levaram a uma
melhora na qualidade das soluções, sendo N o número de cidades: (i) Tamanho da População: Calculado a
partir da eq. (1); (ii) Número de Evoluções: Calculado a partir da eq. (2); (iii) Técnica de Cruzamento: 1
ponto, onde escolhe-se um ponto em dois cromossomos e intercala-se as seções de gene resultantes
gerando dois novos indivíduos; (iv) Probabilidade de Mutação: 20%; (v) Taxa de Mutação: variável entre 4 a
10%; (vi) Técnica de Mutação: Randômica, a qual sorteia qual técnica de mutação utilizar entre: troca (troca
um gene de lugar), troca bloco (troca um bloco de genes), inversão (seleciona e inverte uma seção de
genes) e insere (remove uma seção de genes e a insere em outro lugar do mesmo cromossomo).
Nossos testes foram executados na Scherm Workstation do Laboratório de Estudos Avançados em
Computação (LEA) da UNIPAMPA, que possui um processador Intel® Xeon® E5-2603 v3, com frequência
de 1.9 GHZ e 6 núcleos físicos. O sistema operacional utilizado é o Ubuntu 16.04 LTS com compilador GCC
em sua versão 5.31. Executamos com 2, 3, 4, 5 e 6 threads, além da versão sequencial. Baseando-se nos
resultados de Da Rosa e Cera (2015) usamos para o OpenMP a política de distribuição de iterações static.
Para coletar os rastros de execução usamos a ferramenta Score-P (VI-HPS, 2016) na versão 2.0.2 e
para visualizar os rastros usamos a ferramenta Vampir (GMBH, 2016) na versão de demonstração 9.
Tamanho da População=N×10 (1)
Número de Evoluções=N ×N×10 (2)

RESULTADOS E DISCUSSÃO

Ao término da execução da região paralela ocorre uma sincronização implícita, a partir da qual o
programa segue sua execução apenas com a thread mestre. O tempo de espera em sincronização
Anais do 8º Salão Internacional de Ensino, Pesquisa e Extensão – Universidade Federal do Pampa
Tabela 1 – Tempo de espera em sincronização (em segundos) com e sem o uso de sections e
sua porcentagem no tempo total de execução da aplicação.
c50 c100
Com Sections Sem Sections Com Sections Sem Sections
Threads Tempo % do Tempo % do Tempo % do Tempo % do
(s) total (s) total (s) total (s) total
2 0,08 1,78% 0,06 1,31% 3,03 1,20% 1,84 0,71%
3 0,15 3,72% 0,06 1,50% 6,50 3,42% 1,98 1,02%
4 0,18 5,21% 0,06 1,88% 7,05 4,42% 2,00 1,23%
5 0,20 6,26% 0,10 3,25% 7,90 5,50% 1,92 1,34%
6 0,22 7,33% 0,08 4,10% 9,00 6,75% 3,49 2,62%
Fonte: Elaborado pelo autor.

representa o tempo que uma thread que já terminou de executar espera até que todas as outras threads
terminem suas tarefas para assim realizarem a sincronização. A tabela 1 apresenta o tempo acumulado de
espera em sincronização por thread e a porcentagem que esse tempo representa no tempo total de
execução do AG paralelo para as instâncias c50 e c100, com e sem o uso das Sections.
Através dos resultados obtidos percebe-se que o tempo de espera em sincronização aumenta
conforme se aumenta o número de threads utilizadas devido ao maior número de threads envolvidas em
sincronização. Para a instância c50, de 2 para 6 threads houve um aumento de 2,75 vezes utilizando
Sections e de 1,33 vezes quando não se utiliza Sections. Para a instância c100, de 2 para 6 threads
houve um aumento de 2,97 vezes utilizando Sections e de 1,90 vezes sem o uso de Sections.
O tempo de espera por sincronização quando se utiliza Sections é maior do que quando não se
utiliza, para ambas as instâncias essa diferença passou do dobro do tempo de espera. Sendo que o maior
impacto da utilização de Sections é com 6 threads. Isso ocorre pois as Sections são executadas por
apenas 2 threads. Logo, quando se utiliza mais de 2 threads, apenas 2 threads estarão executando,
enquanto que as demais não estarão realizando nenhum trabalho útil, apenas estarão aguardando o
término da execução das Sections para realizar a sincronização.

CONCLUSÕES

O tempo de espera em sincronização aumenta conforme se aumenta o número de threads. O uso de


Sections em arquiteturas com mais de 2 núcleos aumenta o tempo de espera em sincronização devido as
Sections serem executadas por apenas 2 threads e as demais threads ficarem aguardando pela
sincronização. Para contornar isso, pretendemos adaptar o código e manter as Sections apenas quando
as execuções ocorrem com 2 threads.
A ferramenta Vampir, em sua versão de demonstração, possui limitações quanto ao número de
eventos que podem ser visualizados. Logo, não foi possível visualizar os rastros de execução das instâncias
do PRV com cargas computacionais maiores. Em trabalhos futuros pretende-se contornar tal problema
utilizando outra ferramenta de visualização de rastros.

REFERÊNCIAS

CHAPMAN, B.; JOST, G.; and VAN DER PAS, R. Using OpenMP: portable shared memory parallel programming,
volume 10. MIT press, 2008.

CHRISTOFIDES, N,; MINGOZZI, A.; TOTH, P. and SANDI, C. Combinatorial optimization. John Wiley & Sons, 1979.

DA ROSA, M. F. G. and CERA, M. C. Análise da escabilidade de um algoritmo genético paralelizado usando OpenMP.
In: Workshop de Iniciação Científica (WIC) - Simpósio em Sistemas Computacionais de Alto Desempenho
(WSCAD), Florianópolis. SBC, 2015. p 51-56.

GRESSLER, H. d. O. and CERA, M. C. O impacto da paralelização com OpenMP no desempenho e na qualidade


das soluções de um algoritmo genético. Revista Brasileira de Computação Aplicada, v. 6, 2014. p 35-47.

GMBH. Vampir 9.1. Disponível em: < http://www.vampir.eu/>. Acesso em 19 set. 2016.

PACHECO, P. S. An introduction to parallel programming. Elsevier, 2011.

SCHNORR, L. M. Análise de desempenho de programas paralelos. In: Anais da ERAD/RS 2014. Alegrete, RS: SBC,
2014. p. 57–81.

VI-HPS. Score-P. Disponível em: < http://www.vi-hps.org/projects/score-p/>. Acesso em 19 set. 2016.


Anais do 8º Salão Internacional de Ensino, Pesquisa e Extensão – Universidade Federal do Pampa