diff options
author | Adrian Kummerlaender | 2019-10-21 18:42:24 +0200 |
---|---|---|
committer | Adrian Kummerlaender | 2019-10-21 18:48:38 +0200 |
commit | 82a44e0d64afb8818ea98d68dc08108885d503c2 (patch) | |
tree | 6e8f08acd83b2886cd296ed3831acc83e309906c /boltzgen/kernel/generator.py | |
download | boltzgen-82a44e0d64afb8818ea98d68dc08108885d503c2.tar boltzgen-82a44e0d64afb8818ea98d68dc08108885d503c2.tar.gz boltzgen-82a44e0d64afb8818ea98d68dc08108885d503c2.tar.bz2 boltzgen-82a44e0d64afb8818ea98d68dc08108885d503c2.tar.lz boltzgen-82a44e0d64afb8818ea98d68dc08108885d503c2.tar.xz boltzgen-82a44e0d64afb8818ea98d68dc08108885d503c2.tar.zst boltzgen-82a44e0d64afb8818ea98d68dc08108885d503c2.zip |
Pull in basics from symlbm_playground
It's time to extract the generator-part of my GPU LBM playground and turn it
into a nice reusable library. The goal is to produce a framework that can be
used to generate collision and streaming programs from symbolic descriptions.
i.e. it should be possible to select a LB model, the desired boundary
conditions as well as a data structure / streaming model and use this
information to automatically generate matching OpenCL / CUDA / C++
programs.
Diffstat (limited to 'boltzgen/kernel/generator.py')
-rw-r--r-- | boltzgen/kernel/generator.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/boltzgen/kernel/generator.py b/boltzgen/kernel/generator.py new file mode 100644 index 0000000..bd1bb86 --- /dev/null +++ b/boltzgen/kernel/generator.py @@ -0,0 +1,25 @@ +import sympy + +from mako.template import Template +from pathlib import Path + +def source(descriptor, moments, collide, boundary_src, float_type, geometry): + return Template(filename = str(Path(__file__).parent/'template/kernel.mako')).render( + descriptor = descriptor, + geometry = geometry, + + moments_subexpr = moments[0], + moments_assignment = moments[1], + collide_subexpr = collide[0], + collide_assignment = collide[1], + + float_type = float_type, + + boundary_src = Template(boundary_src).render( + descriptor = descriptor, + geometry = geometry, + float_type = float_type + ), + + ccode = sympy.ccode + ) |