• Nenhum resultado encontrado

PARALELIZAÇÃO DE CÁLCULOS NUMÉRICOS DE REAÇÕES NUCLEARES DE PRÉ-EQUILÍBRIO

N/A
N/A
Protected

Academic year: 2021

Share "PARALELIZAÇÃO DE CÁLCULOS NUMÉRICOS DE REAÇÕES NUCLEARES DE PRÉ-EQUILÍBRIO"

Copied!
5
0
0

Texto

(1)

PARALELIZAÇÃO DE CÁLCULOS NUMÉRICOS DE REAÇÕES NUCLEARES DE PRÉ-EQUILÍBRIO

Maykon Lorencini Bergamaschi

Instituto Tecnológico de Aeronáutica H8C, apto. 325, CTA

12228-462 – São José dos Campos/SP Bolsista PIBIC-CNPq

maykonlb@gmail.com

Brett Vern Carlson

Instituto Tecnológico de Aeronáutica Departamento de Física

Praça Marechal Eduardo Gomes, 50 12228-900 – São José dos Campos/SP brett@ita.br

Resumo: O objetivo deste trabalho é a obtenção de um ganho de desempenho no processamento de cálculos numéricos relacionados a reações de pré-equilíbrio por meio da paralelização desses cálculos, isto é, a distribuição do processamento em vários núcleos, com um aproveitamento melhor dos recursos dos cada vez mais difundidos processadores multi-core. Para isso, o ponto de partida foi o estudo do Fortran, linguagem em que estava escrito o programa. Em seguida, foram estudados os padrões de comunicação para programação paralela OpenMP e MPI. A expectativa era de que, ao término das atividades, estivesse desenvolvido o programa que realiza esses cálculos nos dois padrões para efetuar testes de desempenho. Após a realização dos testes, a versão OpenMP foi selecionada, por apresentar maior eficiência.

Palavras-chave: processamento paralelo, reações de pré-equilíbrio, OpenMP, MPI, Fortran.

1. Introdução

Normalmente, cálculos numéricos de reações nucleares consomem grandes períodos de tempo para serem processados. Um modo de reduzir esse tempo é utilizar clusters, agrupamentos de vários computadores que operam como uma única máquina com grande capacidade de processamento. Outra possibilidade é a utilização de processadores com múltiplos núcleos, os modelos multi-core, que têm se popularizado nos últimos anos. Os dois sistemas propostos constituem exemplos de processamento distribuído ou paralelo, no qual várias instruções são processadas de modo simultâneo.

Entretanto, é importante ressaltar que o ganho de desempenho com esses sistemas acontece somente com uma otimização das aplicações que antes eram executadas em um único processador com um núcleo. Geralmente tal otimização não é simples, pois não são todos os pontos de um código que podem ser processados paralelamente.

O código que foi otimizado realiza cálculos numéricos de reações nucleares de pré-equilíbrio. São cálculos que requerem grandes períodos de tempo para serem efetuados. Esses cálculos podem ser processados de modo mais eficiente por meio do processamento paralelo, que distribui os cálculos em fios para cada um dos processadores. A atuação simultânea dos processadores é que promove o ganho de desempenho.

O projeto foi desenvolvido com o propósito de distribuir o processamento do código e selecionar por meio de testes a versão cuja performance seja a mais eficiente.

2. Diferentes versões do código paralelizado

No início dos trabalhos, estava disponível uma versão do código que realiza cálculos numéricos de reações nucleares de pré-equilíbrio no padrão MPI. A linguagem em que o código estava escrito era Fortran 77. O código não resultava um ganho de desempenho satisfatório, acreditava-se que a capacidade de processamento das máquinas estava sendo subutilizada.

Foi proposta a alteração do padrão do código de MPI para OpenMP, com o objetivo de tornar a performance do programa mais eficiente. Houve, entretanto, grandes dificuldades técnicas na realização dessa atividade.

Como se tornou disponível uma versão desse código para processamento em série, isto é, em máquinas com somente um processador, a tarefa foi modificada: passou a ser a paralelização dessa versão para o padrão OpenMP.

Após o término dessa tarefa, notou-se que os resultados encontrados apresentavam certa discrepância com o que se esperava inicialmente, por motivos até então desconhecidos.

Após estudos mais aprofundados acerca do padrão OpenMP, descobriu-se que os problemas encontrados estavam

relacionados ao fato de o Método de Monte Carlo, utilizado amplamente no código em questão, ser um algoritmo

(2)

computacional baseado em repetida amostragem de números aleatórios para obter seus resultados. No padrão OpenMP, uma seqüência de números pseudo-aleatórios gerada por meio de repetidas chamadas da função random_number() não possui grau de aleatoriedade necessário para o processamento dos cálculos. Isso ocorria porque todos os processadores realizavam os cálculos empregando a mesma semente de geração dos números pseudo-aleatórios, e, dessa forma, era gerada a mesma seqüência de pseudo-aleatórios em cada processador.

2.1. Encontrando um novo gerador de números pseudo-aleatórios

Dessa forma, foi necessário buscar uma outra maneira de gerar a seqüência de números pseudo-aleatórios.

Encontrou-se uma solução para esse problema, um código gerador de números pseudo-aleatórios baseado no método de Ziggurat. O código, no padrão OpenMP, foi apresentado por G. Marsaglia e W. W. Tsang no artigo The Ziggurat

method for generating random variables, publicado em Journal of Statistical Software, vol. 5, n.º 8 e traduzido para a

linguagem Fortran por Alan J. Miller, consultor estatístico da CSIRO (Commonwealth Scientific and Industrial Research Organization, Austrália).

Para essa atividade, houve primeiramente a necessidade de adaptar o gerador de pseudo-aleatórios baseado no método de Ziggurat, que se encontrava em Fortran 90, para Fortran 77. Convém lembrar que Fortran 77 é uma versão mais antiga e limitada que a 90: não estão disponíveis recursos como alocação dinâmica, processo muito conhecido por programadores que consiste em solicitar (e utilizar) uma quantidade de memória conhecida apenas em tempo de execução.

Feito isso, o novo gerador de pseudo-aleatórios foi incluído na versão OpenMP do código do cálculo que emprega o Método de Monte Carlo nos cálculos numéricos de reações nucleares de pré-equilíbrio.

2.2. Fase de testes das diferentes versões do código

Foram realizados diversos testes para verificar a aleatoriedade dos números gerados. Na tabela a seguir, está mostrado o resultado para um teste de geração de 10

9

números pseudo-aleatórios entre 0 e 1. Verifica-se que foram encontrados resultados totalmente coerentes com o grau de aleatoriedade esperado.

Tabela 1. Resultados dos testes do novo gerador de pseudo-aleatórios.

Valor esperado Valor encontrado Média aritmética 0,500000 0,499998 Desvio padrão 0,288675 0,288671

Concomitantemente à programação relacionada à paralelização do código, foram estudadas algumas características do processamento distribuído. Alguns conceitos relacionados a esse tema foram pesquisados. O linear speedup, por exemplo, corresponde ao número de vezes o processamento distribuído é mais rápido que o não-distribuído.

Analisando os períodos de tempo despendidos pelos processamentos distribuído e não-distribuído à luz do conceito de linear speedup, constata-se que os ganhos de desempenho são consideráveis com o padrão OpenMP nessa atividade, como se pode ver na tabela abaixo. Os testes foram realizados com 10

8

iterações em uma máquina com quatro processadores. Cada forma de processamento foi testada três vezes. O processamento não-distribuído empregou somente um dos processadores da máquina.

Tabela 2. Análise dos ganhos de desempenho com o processamento paralelo para o código que utiliza o Método de Monte Carlo.

Forma de Processamento Tempo / min

Linear speedup

Não-distribuído 142 ± 1 -

Com 4 processadores em padrão MPI 148 ± 2 1,0 ± 0,1 Com 4 processadores em padrão OpenMP 80 ± 4 1,8 ± 0,1

Observe que o linear speedup da paralelização com MPI é próximo de 1,0, logo essa forma de processamento não traz ganhos significativos. Esperava-se um resultado diferente, com um ganho de desempenho apreciável. São necessários mais testes para validar o que foi encontrado.

Já o padrão OpenMP apresenta maior eficiência no processamento, conforme revela o valor de seu linear speedup.

Portanto, o código em OpenMP construído neste projeto é o mais adequado para o cálculo que utiliza o Método de Monte Carlo.

Outro teste que foi realizado foi a comparação da utilização de diferentes números de processadores para atuar

sobre o código no padrão OpenMP gerado. Os testes foram efetuados com 10

8

iterações. Foram realizados três testes

para cada número de processadores. A seguir, está mostrado um gráfico com os resultados.

(3)

0 50 100 150 200

1 2 4

Núme ro de proce ssadore s Tempo para processamento/min

Figura 1. Utilização de diferentes números de núcleos para processar a versão OpenMP do código que utiliza o Método de Monte Carlo.

A tabela a seguir mostra uma interessante comparação entre as performances de diferentes números de processadores na versão OpenMP. O ganho de desempenho é medido por meio da performance em relação ao uso de somente um processador.

Tabela 3. Comparação entre as performances de diferentes números de processadores na versão OpenMP do código que utiliza o Método de Monte Carlo.

Número de processadores utilizados

Performance em relação ao uso de somente um processador

2 1,87 ± 0,02

4 2,21 ± 0,13

É válido fazer algumas considerações sobre os resultados obtidos. A primeira se refere à melhor forma de realizar o processamento. Dentro dos recursos que estavam disponíveis, a forma de processamento que corresponde à melhor escolha é a utilização de quatro processadores para a versão OpenMP do código.

Outra consideração é que o número de processadores possui grande influência no desempenho da versão OpenMP:

por exemplo, nos testes com um processador apenas, a versão não-paralelizada é mais rápida que a versão OpenMP.

Entretanto, com quatro processadores a velocidade praticamente dobra em relação à versão não-paralelizada.

3. Conclusões

Após a realização das atividades descritas, verificou-se que o processamento paralelo constitui uma poderosa ferramenta no cálculo numérico de reações nucleares. Os ganhos de desempenho com essa ferramenta são indubitavelmente apreciáveis, visto que os recursos dos novos modelos de processadores são mais bem aproveitados.

De acordo com o que foi mencionado, a versão em OpenMP construída neste projeto apresenta desempenho consideravelmente superior às demais versões testadas. Com isso, pode-se concluir que o projeto está sendo encerrado com bom aproveitamento.

Houve dificuldades na realização das etapas do projeto, em especial na construção do gerador de números pseudo- aleatórios em padrão OpenMP na versão Fortran 77 do código de cálculo numérico que emprega o Método de Monte Carlo. Após consultas a referências bibliográficas, como livros, apostilas e páginas da Internet, os obstáculos foram transpostos.

Além disso, vale ressaltar que o gerador de números pseudo-aleatórios construído neste projeto pode ser utilizado novamente em aplicações semelhantes. O código desse gerador se encontra no Apêndice deste artigo.

4. Agradecimentos

Ao Prof. Dr. Brett Vern Carlson, pela compreensão e pelo suporte fornecido durante a execução das atividades,

além de todo seu empenho à frente da Coordenação Geral do Programa Institucional de Bolsas de Iniciação Científica

(PIBIC) no Instituto Tecnológico de Aeronáutica (ITA). À Prof.ª Dr.ª Lara Kühl Teles, por ceder suas máquinas na

execução de testes feitos durante este projeto. Ao Conselho Nacional de Desenvolvimento Científico e Tecnológico

(CNPq), que, por meio de projetos como o PIBIC, tem dado grande apoio à pesquisa científica no país.

(4)

5. Referências

Etter, D. M., 1992, "Fortran 77 with Numerical Methods for Engineers and Scientists", The Benjamin/Cummings Publishing Company, Inc., Redwood City, 776 p.

Ellis, T. M., Philips, I. R., Lahey, T. M., 1994, "Fortran 90 Programming", Addison-Wesley Publishing Company, Harlow, 825 p.

Random number generation with OpenMP. Disponível em

<http://www.cmiss.org/openCMISS/wiki/RandomNumberGenerationWithOpenMP>. Acesso em: 16 jan. 08.

Marsaglia, G., Tsang, W. W., "The Ziggurat Method for Generating Random Variables", Journal of Statistical Software, v. 5, n. 8, 2000. Disponível em <http://www.jstatsoft.org/v05/i08/paper>. Acesso em: 15 jan. 08.

6. Apêndice: Versão para Fortran 77 do Gerador de Números Pseudo-aleatórios em padrão OpenMP

c Pseudorandom number generator

c Ziggurat Algorithm using Fortran 77 and OpenMP

c Setting the seeds

SUBROUTINE par_zigset(p_seed) integer npar

parameter (npar=4)

integer grainsize

parameter (grainsize=32)

integer i, kpar

integer parjsr(2*npar*grainsize+1) integer seed(npar)

common /p_jsr/ parjsr ,seed

do 20 i=1,npar

call random_number(rt) seed(i) = 123456789*rt 20 continue

! Now treat each instance separately do 10 kpar=1,npar

! Set the seed

parjsr(kpar*grainsize) = seed(kpar)

if (kpar.gt.npar) then

write (*,*) 'thread number exceeds ' write (*,*) 'initialized max: ', kpar, npar endif

10 continue

RETURN END

! Pseudorandom number generator

! Generate random 32-bit integers and, after that,

! generate uniformly distributed random numbers, sequence kpar

double precision function par_uni(kpar) integer npar

parameter (npar=4)

integer grainsize

parameter (grainsize=32)

double precision half

(5)

parameter (half=0.5)

integer jz, jsr

integer parjsr(2*npar*grainsize+1) integer seed(npar)

double precision par_shr3 common /p_jsr/ parjsr ,seed

jsr = parjsr(kpar*grainsize) jz = jsr

jsr = ieor (jsr, ishft (jsr, 13) ) jsr = ieor (jsr, ishft (jsr, -17) ) jsr = ieor (jsr, ishft (jsr, 5) ) parjsr(kpar*grainsize) = jsr par_shr3=jz+jsr

par_uni = half + par_shr3*0.2328306E-9

return

end

Referências

Documentos relacionados

No final, os EUA viram a maioria das questões que tinham de ser resolvidas no sentido da criação de um tribunal que lhe fosse aceitável serem estabelecidas em sentido oposto, pelo

insights into the effects of small obstacles on riverine habitat and fish community structure of two Iberian streams with different levels of impact from the

A versão reduzida do Questionário de Conhecimentos da Diabetes (Sousa, McIntyre, Martins &amp; Silva. 2015), foi desenvolvido com o objectivo de avaliar o

O fortalecimento da escola pública requer a criação de uma cultura de participação para todos os seus segmentos, e a melhoria das condições efetivas para

O Estudo de Caso analisou os fatores extra e intraescolares associados à eficácia escolar do Instituto de Educação Eber Teixeira de Figueiredo, instituição de ensino da

Esta dissertação pretende explicar o processo de implementação da Diretoria de Pessoal (DIPE) na Superintendência Regional de Ensino de Ubá (SRE/Ubá) que

[r]

Fonte: elaborado pelo autor. Como se pode ver no Quadro 7, acima, as fragilidades observadas após a coleta e a análise de dados da pesquisa nos levaram a elaborar