Feature Request
Planned Features
- Edge/Faces values for FVM
- Loop transformations blocking, tilling for Phase-Field values
- Loop reduction for LBM evaluation/debugging/output (i.e. max, sum ...)
- LLVM?, PACXXX??
- LBM list kernel+++
- Vectorisierung
- LROP (Sparse Phases)
- Boundaries
- CSE???
- Communication code for LBM
- Layouts for LBM
Planned Architecture
-
Stage 1: ordered list of sympy equations,
- this stage should remain unchanged (interface stability)
- contains
Field.Access
objects - contains
sp.Piecewise
functions to represent ifs - in the future it might also contain reduction markers to do reductions in the same step as the computation. for example: a lattice boltzmann kernel somewhere computes velocity: a reduction can be defined to compute the maximal velocity over all cells
- may also contain TypedSymbols i.e. sympy symbols that are annotated with their type
-
Stage 2:
- Type untyped Symbols
-
Stage 3: AST with as few transformation done as possible
- loops are written around equations - loop over all cells - indexed kernels: (x,y,z) is loaded from an index fields (struct support!)
- KernelFunction node (which should be fully functional already, knows parameters etc) is the outermost node
- field accesses are not yet resolved, however the loop counters are introduced to make relative to absolute indices
f[1,-1]
getsf[ctr0 + 1, ctr1 - 1]
-
Stage 4: Field accesses are resolved to pointer arithmetic
- can be splitted into
resolveArrayAccesses
andresolveStructAccesses
- no information should be lost in this stage, i.e. the Indexed nodes should still know their field
- can be splitted into
-
Stage 5: Typing of all expressions with a dict and insertion of cast nodes
Transformations
- move constants before loop (after stage 5)
- cache blocking of loops (after stage 5)
- loop peeling to make main loop pointer access aligned (after stage 5)
- loop splitting for LBM split kernels (currently done after Stage 3, can this also be moved after stage 5?)