Uma implementação baseada em tarefas e fluxo de dados do método de Lattice-Boltzmann
Resumo
Lattice-Boltzmann é um método numérico iterativo para a modelagem mesoscópica e
simulação da dinâmica de fluxos de fluidos. Esse método simula as propriedades discretas
de sistemas físicos e, para que as simulações sejam realizadas em um tempo computacionalmente
aceitável, exige um grande poder computacional. Diversos estudos na literatura
dedicam-se à paralelização e avaliação do desempenho do método de Lattice-Boltzmann
aplicado a uma variedade de problemas utilizando uma ampla gama de arquiteturas de computação
de alto desempenho, desde arquiteturas de memória compartilhada, distribuída e
híbrida até aceleradores GPU, Xeon Phi, entre outros. No cenário atual em que fabricantes
de processadores praticamente duplicam a quantidade de transistores em um mesmo chip a
cada nova geração dedicando-os à replicação de núcleos, a exploração eficiente do crescente
paralelismo oferecido especialmente por arquiteturas de computação de alto desempenho
com memória compartilhada depende da adoção de técnicas de paralelismo que otimizem a
execução de aplicações nessas arquiteturas. Uma das técnicas de paralelismo mais populares
nesse tipo de arquitetura é o paralelismo de iterações de laços de repetição utilizando a
API OpenMP. Apesar de proporcionar ganhos significativos de desempenho, o paralelismo
oferecido por esse tipo de arquitetura nem sempre é explorado em sua totalidade e técnicas
como a de paralelismo de tarefas podem ser utilizadas a fim de otimizar a exploração do
paralelismo por aplicações. Embora o paralelismo de tarefas seja suportado desde a versão
3.0 da API OpenMP, o conceito de dependência de dados entre tarefas foi introduzido
somente na versão 4.0. Por meio da especificação das dependências de dados é possível
adicionar restrições ao escalonamento de tarefas de modo que a ordem de execução seja
determinada conforme as operações de leitura e escrita realizadas por cada tarefa em
endereços na memória evitando, assim, inconsistências na execução paralela de tarefas.
Por se tratar de um método iterativo, a paralelização do método de Lattice-Boltzmann
utilizando tarefas exige que a cada nova iteração as diferentes tarefas sejam sincronizadas,
que pode ser realizada a partir da determinação das dependências de cada tarefa. Portanto,
o objetivo deste trabalho é apresentar e avaliar o desempenho de uma implementação
baseada em tarefas e fluxo de dados do método de Lattice-Boltzmann utilizando tarefas
OpenMP com dependências. Os resultados experimentais realizados em uma arquitetura de
memória compartilhada NUMA composta por 48 núcleos de processamento mostram que o
desempenho da implementação baseada em tarefas com dependências foi até 22,49% melhor
se comparado ao desempenho obtido por uma implementação baseada no paralelismo de
iterações dos laços de repetição.
Coleções
Os arquivos de licença a seguir estão associados a este item: