Uma Implementação Baseada em Tarefas e Fluxo de Dados do Método de Lattice-Boltzmann
Autor: | Freytag, Gabriel |
---|---|
Přispěvatelé: | Lima, João Vicente Ferreira, Charao, Andrea Schwertner, Padoin, Edson Luiz |
Rok vydání: | 2018 |
Předmět: | |
Zdroj: | Biblioteca Digital de Teses e Dissertações do UFSM Universidade Federal de Santa Maria (UFSM) instacron:UFSM |
DOI: | 10.13140/rg.2.2.33588.76169 |
Popis: | Coordenação de Aperfeiçoamento de Pessoal de Nível Superior - CAPES Lattice-Boltzmann is an iterative numerical method for mesoscopic modeling and simulation of fluid flow dynamics. This method simulates the discrete properties of physical systems and, for the simulations to be performed in a computationally acceptable time, requires a great computational power. Several studies in the literature are dedicated to parallelizing and evaluating the performance of the Lattice-Boltzmann method applied to a variety of problems using a wide range of high-performance computing architectures ranging from shared, distributed and hybrid memory architectures to GPU accelerators, Xeon Phi, among others. In today’s scenario where processor manufacturers practically double the number of transistors on a single chip with each new generation dedicating them to core replication, the efficient exploitation of the increasing parallelism offered especially by shared memory high performance computing architectures depends on the adoption of parallelism techniques that optimize the execution of applications in these architectures. One of the most popular parallelism techniques in this type of architecture is the parallelism of loop iterations using the OpenMP API. In spite of providing significant performance gains, the parallelism offered by this type of architecture is not always exploited in its entirety and techniques such as task parallelism can be used to optimize the exploitation of parallelism by applications. Although task parallelism has been supported since version 3.0 of the OpenMP API, the concept of data dependency between tasks has only been introduced in version 4.0. By specifying the data dependencies it is possible to add constraints to the scheduling of tasks so that the execution order is determined according to the read and write operations performed by each task in memory addresses, thus avoiding inconsistencies in the parallel execution of tasks. Because it is an iterative method, the parallelization of the Lattice-Boltzmann method using tasks requires that at each new iteration the different tasks be synchronized, which can be performed from the determination of the dependencies of each task. Therefore, the objective of this work is to present and evaluate the performance of a task-based and data flow implementation of the Lattice-Boltzmann method using OpenMP tasks with dependencies. The results of experiments performed on a NUMA shared memory architecture composed of 48 processing cores show that the performance of the task-based implementation with dependencies was up to 22.49% better when compared to the performance achieved by an implementation based on loop-level parallelism. 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. |
Databáze: | OpenAIRE |
Externí odkaz: |