diff options
author | Adrian Kummerlaender | 2019-10-27 14:05:21 +0100 |
---|---|---|
committer | Adrian Kummerlaender | 2019-10-27 14:05:21 +0100 |
commit | 18c54d79699db7554faa851c87d7113db67a8a08 (patch) | |
tree | c89243b5796bb8f1e6a8cea241f3a5e1bf934ba1 /boltzgen/kernel/generator.py | |
parent | 7fa72d8718d96727bcfd60cc3bcb1609526d3c9b (diff) | |
download | boltzgen-18c54d79699db7554faa851c87d7113db67a8a08.tar boltzgen-18c54d79699db7554faa851c87d7113db67a8a08.tar.gz boltzgen-18c54d79699db7554faa851c87d7113db67a8a08.tar.bz2 boltzgen-18c54d79699db7554faa851c87d7113db67a8a08.tar.lz boltzgen-18c54d79699db7554faa851c87d7113db67a8a08.tar.xz boltzgen-18c54d79699db7554faa851c87d7113db67a8a08.tar.zst boltzgen-18c54d79699db7554faa851c87d7113db67a8a08.zip |
Separate functions into separate template files
Selection of the desired templates is possible via a new `functions` parameter.
Diffstat (limited to 'boltzgen/kernel/generator.py')
-rw-r--r-- | boltzgen/kernel/generator.py | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/boltzgen/kernel/generator.py b/boltzgen/kernel/generator.py index 8d0de37..04b0a64 100644 --- a/boltzgen/kernel/generator.py +++ b/boltzgen/kernel/generator.py @@ -7,25 +7,15 @@ import kernel.target.cl import kernel.target.cpp class Generator: - def __init__(self, descriptor, moments, collision, boundary = ''): + def __init__(self, descriptor, moments, collision): self.descriptor = descriptor self.moments = moments self.collision = collision - self.boundary = boundary - def kernel(self, target, precision, layout, geometry, extras = []): - template_path = Path(__file__).parent/('template/basic.' + target + '.mako') + def instantiate(self, target, template, float_type, layout_impl, geometry, extras = []): + template_path = Path(__file__).parent/("template/%s.%s.mako" % (template, target)) if not template_path.exists(): - raise Exception("Target '%s' not supported" % target) - - layout_impl = eval("kernel.target.%s.%s" % (target, layout)) - if layout_impl is None: - raise Exception("Target '%s' doesn't support layout '%s'" % (target, layout)) - else: - layout_impl = layout_impl(self.descriptor, geometry) - - if geometry.dimension() != self.descriptor.d: - raise Exception('Geometry dimension must match descriptor dimension') + raise Exception("Target '%s' doesn't provide '%s'" % (target, template)) return Template(filename = str(template_path)).render( descriptor = self.descriptor, @@ -38,16 +28,24 @@ class Generator: collision_assignment = self.collision[1], ccode = sympy.ccode, - float_type = { - 'single': 'float', - 'double': 'double' - }.get(precision), - - boundary_src = Template(self.boundary).render( - descriptor = self.descriptor, - geometry = geometry, - float_type = precision - ), + float_type = float_type, extras = extras ) + + def kernel(self, target, precision, layout, geometry, functions = ['collide_and_stream'], extras = []): + layout_impl = eval("kernel.target.%s.%s" % (target, layout)) + if layout_impl is None: + raise Exception("Target '%s' doesn't support layout '%s'" % (target, layout)) + else: + layout_impl = layout_impl(self.descriptor, geometry) + + if geometry.dimension() != self.descriptor.d: + raise Exception('Geometry dimension must match descriptor dimension') + + float_type = { + 'single': 'float', + 'double': 'double' + }.get(precision) + + return "\n".join(map(lambda f: self.instantiate(target, f, float_type, layout_impl, geometry, extras), functions)) |