CloverLeaf is a mini-app that solves the compressible Euler equations on a Cartesian grid, using an explicit, second-order accurate method. Each cell stores three values: energy, density, and pressure. A velocity vector is stored at each cell corner. This arrangement of data, with some quantities at cell centers, and others at cell corners is known as a staggered grid. CloverLeaf currently solves the equations in two dimensions, but a 3D implementation has been started in: CloverLeaf3D.
The computation in CloverLeaf has been broken down into "kernels" — low level building blocks with minimal complexity. Each kernel loops over the entire grid and updates one (or some) mesh variables, based on a kernel-dependent computational stencil. Control logic within each kernel is kept to a minimum , allowing maximum optimisation by the compiler. Memory is sacrificed in order to increase peformance, and any updates to variables that would introduce dependencies between loop iterations are written into copies of the mesh.
Below the top level Leaf directory there is a directory called CloverLeaf. The sub directories in this directory contain the various implementation of the code.
- Serial - contains a serial version with no MPI or OpenMP
- OpenMP - contains an OpenMP version only with no MPI
- MPI - contains an MPI only implementation
- OpenACC - contains an OpenACC/MPI implementation that works under the Cray compiler
- HMPP- contains another OpenACC/MPI implementation that works with the CAPS and Cray compiler
- Offload - contains an Intel Offload/MPI implementation
- CUDA - contains the CUDA/MPI implementation
- Ref - contains a hybrid OpenMP/MPI implemention. The Serial, OpenMP and MPI versions are extracted from this version so should not diverge from it apart from the removal of the relevant software models.
https://github.com/UK-MAC/CloverLeaf
No comments:
Post a Comment