Multi-GPU performance optimization of a computational fluid dynamics code using OpenACC
Department of Aerospace and Ocean Engineering, Virginia Tech, 215 Randolph Hall, Blacksburg, VA, 24061, USA
Concurrency Computation: Practice and Experience, 33:e6036, 2021
DOI:10.1002/cpe.6036
@article{xue2021multi,
title={Multi-GPU performance optimization of a computational fluid dynamics code using OpenACC},
author={Xue, Weicheng and Roy, Christoper J},
journal={Concurrency and Computation: Practice and Experience},
volume={33},
number={5},
pages={e6036},
year={2021},
publisher={Wiley Online Library}
}
This article investigates the multi-GPU performance of a 3D buoyancy driven cavity solver using MPI and OpenACC directives on multiple platforms. The article shows that decomposing the total problem in different dimensions affects the strong scaling performance significantly for the GPU.Without proper performance optimizations, it is shown that 1D domain decomposition scales poorly on multiple GPUs due to the noncontiguous memory access. The performance using whatever decompositions can be benefited from a series of performance optimizations in the article. Since the buoyancy driven cavity code is communication-bounded on the clusters examined, a series of optimizations both agnostic and tailored to the platforms are designed to reduce the communication cost and improve memory throughput between hosts and devices efficiently. First, the parallel message packing/unpacking strategy developed for noncontiguous data movement between hosts and devices improves the overall performance by about a factor of 2. Second, transferring different data based on the stencil sizes for different variables further reduces the communication overhead. These two optimizations are general enough to be beneficial to stencil computations having ghost exchanges. Third, GPUDirect is used to improve the communication on clusters which have the hardware and software support for direct communication between GPUs without staging the memory of CPU. Finally, overlapping the communication and computations is shown to be not efficient on multi-GPUs if only usingMPI or MPI+OpenACC. Although we believe our implementation has revealed enough communication and computation overlap, the actual running does not utilize the overlap well due to a lack of enough asynchronous progression.
February 28, 2021 by hgpu