From 05aa005a78d188d0d0ce3d77b921536e0c0bec0b Mon Sep 17 00:00:00 2001 From: Stephan Seitz <stephan.seitz@fau.de> Date: Thu, 28 Nov 2019 16:38:43 +0100 Subject: [PATCH] Add `use_auto_for_assignments` as a kernel parameter --- pystencils/astnodes.py | 2 +- pystencils/kernelcreation.py | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pystencils/astnodes.py b/pystencils/astnodes.py index 6535b13fd..cc58ebd30 100644 --- a/pystencils/astnodes.py +++ b/pystencils/astnodes.py @@ -518,7 +518,7 @@ class LoopOverCoordinate(Node): class SympyAssignment(Node): - def __init__(self, lhs_symbol, rhs_expr, is_const=True, use_auto=True): + def __init__(self, lhs_symbol, rhs_expr, is_const=True, use_auto=False): super(SympyAssignment, self).__init__(parent=None) self._lhs_symbol = lhs_symbol self.rhs = sp.sympify(rhs_expr) diff --git a/pystencils/kernelcreation.py b/pystencils/kernelcreation.py index e0c635e06..408cc506b 100644 --- a/pystencils/kernelcreation.py +++ b/pystencils/kernelcreation.py @@ -26,7 +26,8 @@ def create_kernel(assignments, gpu_indexing='block', gpu_indexing_params=MappingProxyType({}), use_textures_for_interpolation=True, - cpu_prepend_optimizations=[]): + cpu_prepend_optimizations=[], + use_auto_for_assignments=False): """ Creates abstract syntax tree (AST) of kernel, using a list of update equations. @@ -102,12 +103,10 @@ def create_kernel(assignments, vectorize(ast, **cpu_vectorize_info) else: raise ValueError("Invalid value for cpu_vectorize_info") - return ast elif target == 'llvm': from pystencils.llvm import create_kernel ast = create_kernel(assignments, type_info=data_type, split_groups=split_groups, iteration_slice=iteration_slice, ghost_layers=ghost_layers) - return ast elif target == 'gpu': from pystencils.gpucuda import create_cuda_kernel ast = create_cuda_kernel(assignments, type_info=data_type, @@ -115,10 +114,15 @@ def create_kernel(assignments, iteration_slice=iteration_slice, ghost_layers=ghost_layers, skip_independence_check=skip_independence_check, use_textures_for_interpolation=use_textures_for_interpolation) - return ast else: raise ValueError("Unknown target %s. Has to be one of 'cpu', 'gpu' or 'llvm' " % (target,)) + if use_auto_for_assignments: + for a in ast.atoms(SympyAssignment): + a.use_auto = True + + return ast + def create_indexed_kernel(assignments, index_fields, -- GitLab