1.INTRODUÇÃO
A maioria dos problemas da dinâmica de fluidos são descritos pelas equações de Euler e de Navier-Stokes (Chung,
2010), (Randles et al., 2013). Através do estudo das propriedades dos
líquidos e gases é possível determinar diferentes tipos de fenômenos
físicos, tais como: simulação de furacões, previsão de tempo,
aerodinâmica,aeroacústica e gerenciamento térmico (Batchelor, 2000), (Schepke et al., 2009).
A
evolução dos sistemas computacionais tornou possível resolver estes
problemas de forma eficiente através de novas técnicas de simulação. Com
isso, alguns métodos e algoritmos foram desenvolvidos para simulações
numéricas. Normalmente, o domínio de um problema da dinâmica de fluidos é
discretizado, gerando um conjunto de equações lineares que é resolvido
através de métodos numéricos (Sims et al., 2000). Métodos alternativos,
como o Método de Lattice Boltzmann (MLB) foram desenvolvidos para
melhorar e simplificar estas etapas.
Do ponto de vista computacional, as operações do MLB são essencialmente locais, e o paralelismo do algoritmotorna-se uma
alternativa para reduzir o tempo de execução e com isso permitir a
simulação de problemas maiores em tempo aceitável. Devido a isso, o MLB
constitui a possibilidade de avaliar o Intel Xeon Phi para indicar se o
coprocessador é uma boa abordagem para aplicações da dinâmica de
fluidos.
O Intel Xeon Phi é um dos mais novosmany-core. O coprocessador possui até 61 cores e 244 threads para
acelerar códigos altamente paralelos. Esta arquitetura permite o uso de
linguagens de programação tradicionais e ferramentas de desenvolvimento
padrão. Neste trabalho, investigamos como o coprocessador Intel Xeon
Phi poderia impactar no tempo de execução de modelos de fluxo de
fluido, considerando duas interfaces de programação paralela.
O
restante deste artigo está organizado da seguinte forma. A Seção 2 dá
uma visão geral do coprocessador Intel Xeon Phi. A Seção 3 apresenta os
trabalhos relacionados com o MLB e avaliações anteriores de diversas
arquiteturas paralelas. A Seção 4 apresenta detalhes da nossa versão
paralela do MLB. Os resultados experimentais são mostrados na Seção 5.
Finalmente, a Seção 6 apresenta a conclusão deste trabalho e os
trabalhos futuros previstos.
2.INTEL XEON PHI
O coprocessador é acoplado ao sistema hospedeiro por meio de uma PCI
Express que executa internamente uma distribuição Linux leve (Jeffers e
Reinders, 2013).
Interfaces de programação paralela como Intel Cilk Plus e OpenMP
(OpenMP) permitem que o desenvolvedor execute a parte intensiva da
computação do código na arquitetura desejada. Aplicações programadas em
paralelo com tais interfaces podem ser compiladas no sistema local
utilizando aflag -mmic que permite que o compilador gere um arquivo executável para arquitetura MIC.
3.TRABALHOS RELACIONADOS
Diversos experimentos têm sido feitos sobre a avaliação comparativa
do coprocessador Intel Xeon Phi. A maioria desses trabalhos relatam
resultados em aplicações numéricas (Winter et al., 2014), (Vaidyanathan
et al., 2014).
No entanto, há poucos trabalhos sobre o MLB para o coprocessador
Intel Xeon Phi. Crimi et al. (2013) descreve resultados de experimentos
iniciais no protótipo MIC Knights Corner (KNC).
4.IMPLEMENTAÇÃO PARALELA
Neste trabalho, o Método de Lattice Boltzmann foi implementado em linguagem de programação C.
A estrutura s_properties contém
as propriedades físicas, tais como: densidade, aceleração, escala do
tempo de relaxação e o diâmetro real simulado usado para o cálculo do
número de Reynolds.
A estrutura s_lattice armazena
informações a respeito da malha. Nela está definido um vetor
descrevendo a posição das barreiras e bordas do fluxo e um vetor onde
são armazenadas as informações das propriedades físicas atribuídas a
cada um dos pontos da malha.
O laço principal do algoritmo é composto por operações de
redistribuição, propagação, condição de contorno e relaxação. Nas
subseções seguintes são apresentados detalhes das implementações
paralelas do Método de Lattice Boltzmann, destacando cada interface de
programação utilizada.
4.1 Intel Cilk Plus
O código apresentado na Fig. 1 descreve a paralelização do método usando a interface de programação paralela Intel Cilk Plus.
O laço cilk_for é um substituto para o laço for que permite que iterações sejam executadas em paralelo. Em tempo de execução, o laço cilk_for é convertido em uma função chamada recursivamente utilizando o paradigma dividir para conquistar.
4.2 OpenMP
Nesta versão, as iterações do laço são divididas pelo número de
fluxos de execução. As variáveis privadas e compartilhadas são definidas
por um construtor padrão. Há barreiras implícitas no fim das
construções
#pragma omp parallel for.
O código na Fig. 2 descreve a paralelização do método com essa interface de programação paralela.
A Fig. 3 mostra os resultados de tempo de execução no Intel Xeon Phi,
destacando- se cada interface de programação utilizada e quatro
variações de tamanho da malha. Os resultados computacionais foram
obtidos a partir da média de 20 execuções, onde o desvio padrão foi
menor que 1s.
Em relação às interfaces de programação paralela, OpenMP apresenta um speedup maior,
sendo até 33,97% melhor que Cilk, isso se deve às otimizações de cada
interface para operações matemáticas e de acesso à memória.
De modo geral as funções são divididas em dois grupos. As demath-bound são funções que possuem uso intensivo de operações matemáticas e as de memory- bound funções que possuem dependência de dados e grande numero de acessos à memória.
Intel Cilk Plus apresentou melhor desempenho em funções memory-bound, como as de propagação e condições de contorno, e OpenMP em funções math- bound, as quais nesta aplicação representam a maior parte do tempo de execução.
6.CONCLUSÃO E TRABALHOS FUTUROS
Neste trabalho, avaliamos o desempenho das versões paralelas do
Método de Lattice Boltzmann executando no coprocessador Xeon Phi. Nossos
experimentos mostram que a interface OpenMP otimiza ganhos em funções math-bound e a Cilk mem-bound.
Trabalhos futuros incluem avaliações experimentais do nosso MLB
paralelo utilizando a nova interface OpenMP 4. Além disso, a versão
tridimensional do MLB será implementada.
BATCHELOR, G. K. An Introduction to Fluid Dynamics. In: Cambridge university press, 2000.
SCHEPKE, C.; MAILLARD, N.; NAVAUX, P. O. A. Parallel Lattice Boltzmann Method with Blocked Partitioning. International Journal of Parallel Programming, 2009.
SIMS, J. S.; HAGEDORN, J. G; KETCHAM, P. M.; SATTERFIELD, S. G.
Accelerating Scientific Discovery Through Computation and Visualization. Journal of
Research of the National Institute of Standards and Technology, 2000.
JEFFERS, J.; REINDERS, J. Intel Xeon Phi Coprocessor High Performance Programming. In: Morgan Kaufmann,2013.
WINTER, F. T.; CLARK, A.; EDWARDS, R. G.; JOO, B. A Framework for Lattice QCD Calculations on GPUs. International
Parallel and Distributed Processing Symposium, 2014.
VAIDYANATHAN, K; PAMNANY, K.; KALAMKAR, D. D.; HEINECKE, A.;
SMELYANSKIY, M.; PARK, J.; KIM, A. S. G.; KAUL, B.; JOO, B.; DUBEY, P.
Improving Communication Performance and Scalability of Native
Applications on Intel Xeon Phi Coprocessor Clusters.
International Parallel and Distributed Processing Symposium, 2014.
CRIMI, G.; MANTOVANI, F.; PIVANTI, M.; SCHIFANO, S.; TRIPICCIONE, R.
Early Experience on Porting and Running a Lattice Boltzmann Code on the Xeon-phi Co-Processor. Procedia Computer Science,
2013
Agradecimentos
Este trabalho foi financiado pelo PROBIC - FAPERGS / UNIPAMPA. Gostaríamos de agradecer ao Intel Manycore Testing Lab que nos permitiu utilizar os seus sistemas de computação.
REFERÊNCIAS
CHUNG, T. J. Computational fluid dynamics. In: Cambridge university press.
2010.
RANDLES, A. P.; KALE, V.; HAMMOND, J.; GROPP, W.; KAXIRAS, E. Performance Analysis of the Lattice Boltzmann Model beyond Navier-Stokes. Parallel and Distributed Processing, 2013.