  The performance of lattice-Boltzmann solver implementations usually depends
mainly on memory access patterns. Achieving high performance requires then
complex code which handles careful data placement and ordering of memory
transactions. In this work, we analyse the performance of an implementation
based on a new approach called the data-oriented language, which allows the
combining of complex memory access patterns with simple source code. As a use
case, we present and provide the source code of a solver for D2Q9 lattice and
show its performance on GTX Titan Xp GPU for dense and sparse geometries up to
4096 2 nodes. The obtained results are promising, around 1000 lines of code
allowed us to achieve performance in the range of 0.6 to 0.7 of maximum
theoretical memory bandwidth (over 2.5 and 5.0 GLUPS for double and single
precision, respectively) for meshes of size above 1024 2 nodes, which is close
to the current state-of-the-art. However, we also observed relatively high and
sometimes difficult to predict overheads, especially for sparse data
structures. The additional issue was also a rather long compilation, which
extended the time of short simulations, and a lack of access to low-level
optimisation mechanisms.
