def _post_process(self, original, compiled, index_name, **kwargs): target_names = [part.primary_mesh for part in original.body] #nodes = [self.IterationSpaceConverter(self.index_name).visit(node) for node in nodes] array_names = find_names(original) function_name = 'kernel' ndim = self.get_ndim(original) body = [] for output_name, space in zip(target_names, compiled.body): space = self.BasicIndexOpConverter().visit(space) parts = self.IterationSpaceConverter(self.index_name, output_name).visit(space) body.extend(parts) args = [part.output for part in original.body] args.extend(sorted(array_names - set(target_names))) tree = ast.FunctionDef( name=function_name, args=ast.arguments( args=[ast.Name(id=arg, ctx=ast.Param()) for arg in args], vararg=None, kwarg=None, defaults=[] ), body=body, decorator_list=[] ) # print("hello") tree = ast.Module(body=[tree]) # tree = self.BasicIndexOpConverter().visit(tree) # tree = self.IterationSpaceConverter(self.index_name, original.body[-1].output).visit(tree) tree = ast.fix_missing_locations(tree) code = compile(tree, '<string>', 'exec') exec code in globals(), locals() return locals()['kernel']
def _post_process(self, original, compiled, index_name, **kwargs): kern = self.LazySpecializedKernel( py_ast=compiled, names=find_names(original), index_name=index_name, target_names=[stencil.primary_mesh for stencil in original.body if hasattr(stencil, "primary_mesh")], _hash=hash(original), original=original ) kern.tile_size = self.tile_size return kern