aboutsummaryrefslogtreecommitdiff
path: root/boltzgen/kernel/generator.py
diff options
context:
space:
mode:
authorAdrian Kummerlaender2019-10-21 18:42:24 +0200
committerAdrian Kummerlaender2019-10-21 18:48:38 +0200
commit82a44e0d64afb8818ea98d68dc08108885d503c2 (patch)
tree6e8f08acd83b2886cd296ed3831acc83e309906c /boltzgen/kernel/generator.py
downloadboltzgen-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.py25
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
+ )