Lattice Boltzmann Solvers in DPC++
SankhyaSutra Labs builds massively high fidelity multiphysics solvers which cater to design and optimization needs in the aerospace, automotive, healthcare, petrochemical and semiconductor process engineering sectors. Our high fidelity solvers are complemented by reduced order models, based on machine learning, which quickly filter out candidates of interest in very large dimensional design parameter spaces. I will highlight our experience while porting one of our core solvers to DPC++.
The lattice Boltzmann method simulates the movement and interaction of mesoscopic particles and is able to reproduce the continuum behaviour of partial differential equations like the Fourier equation for thermal physics and Navier-Stokes equation for flow physics. The method involves manipulation of vectors at each grid point of a lattice using repeated application of two kernels – a memory bandwidth limited advection kernel which performs strided copy of variables along stencil directions and a compute limited collision kernel which involves numerous matrix operations on small vectors. We have been running fined-tuned C++ implementations of these solvers on CPUs. Using Intel oneAPI base and HPC toolkits, we have converted our C++ solver modules to DPC++ device kernels in order to leverage performance benefits from heterogeneous nodes containing CPUs, GPUs and FPGAs while maintaining a unified codebase.