SPEChpc™ 2021 Benchmark Description

Benchmark Name

805.lbm_l (D2Q37)

Benchmark Author

Submitted by Sebastiano Fabio Schifano sebastiano.schifano __at__ unife.it

Authors listed in alphabetic order:

(*) corresponding author, sebastiano.schifano __at__ unife.it

We also thanks the following students:

Benchmark Program General Category

Computational Fluid Dynamics

Benchmark Description

D2Q37 is a Computational Fluid Dynamics code for simulating 2D-fluids using the Lattice Boltzmann Method (LBM) with 37 components of velocity. From a physics point of view, this model improves the accuracy of simpler LBM methods -- e.g. D2Q7 or D2Q9 -- as it is able to describe in full details the thermo-hydrodynamical behavior of a fluid, whose equation of state is that of a perfect gas. Computation is performed in double-precision, and the code includes two computational relevant kernels: one kernel, "propagate", is strongly memory bound, and the other, "collide", is compute bound with an arithmetic intensity of approx 11 FLOP/BYTE. The two kernels are therefore able to stress and benchmark both the memory and computation sub-systems of recent GPU and CPU processors. The code is implemented in several versions, including MPI+CUDA and MPI+OPENACC running on GPU-clusters, and also MPI+C, running on CPUs clusters. The MPI+CUDA and MPI+OpenACC versions also support CUDA-aware MPI communications that overlap with compute, while the MPI+C version is vectorized and multithreaded. The code supports 1D and 2D domain decomposition.

Input Description

The control file provides -- one per row -- the following input parameters:

In the present setup the code performs a simulation of the evolution of the Rayleigh-Taylor instability. To do this, a reasonable choice of the lattice size is such that the aspect ratio of the X and Y sizes is 1:4 (e.g. X=1024 and Y=4096) and number of iterations is approximately 100000.

Output Description

The code performs the simulation, and at the end it checks that the fluid mass in the whole simulation domain has not changed from its initial value (up to a relative error of 10-10). This simple check is enough to make sure that the code has executed correctly.

If the simulation gives a correct result the following message is print:
Mass check: PASSED.
Otherwise, the message warns that the check FAILED and displays the initial and final values of the mass together with the corresponding relative error. The following is an example of message in case of check failure:
Mass check: FAILED 8.8510211292e+06 <> 8.8510211178e+06 (Er: 1.287987e-09).

Programming Language

External Dependencies


Runtime Limitations (such as number of ranks)


Known portability issues


Version and Licensing

Application Version: 1.6.29

License: BSD 3 Clause