diff --git a/pystencils/backends/cbackend.py b/pystencils/backends/cbackend.py index 1273b7b008e7fe7ea3d4db5f4f19097de2cff7e7..9603d6d232bd677b1e6ca0cb7ec147773b688fdb 100644 --- a/pystencils/backends/cbackend.py +++ b/pystencils/backends/cbackend.py @@ -628,20 +628,6 @@ class VectorizedCustomSympyPrinter(CustomSympyPrinter): return result def _print_Add(self, expr, order=None): - def visit(summands): - if len(summands) == 2: - sign = summands[0].sign * summands[1].sign - func = self.instruction_set['-' + suffix] if sign == -1 else self.instruction_set['+' + suffix] - return func.format(summands[0].term, summands[1].term) - else: - elements = len(summands) // 2 - if len(summands[:elements]) < 2: - func = self.instruction_set['-' + suffix] \ - if summands[0].sign == -1 else self.instruction_set['+' + suffix] - return func.format(summands[0].term, visit(summands[elements:])) - else: - func = self.instruction_set['+' + suffix] - return func.format(visit(summands[:elements]), visit(summands[elements:])) try: result = self._scalarFallback('_print_Add', expr) except Exception: @@ -676,13 +662,10 @@ class VectorizedCustomSympyPrinter(CustomSympyPrinter): summands.insert(0, self.SummandInfo(1, "0")) assert len(summands) >= 2 - if len(summands) < 10: - processed = summands[0].term - for summand in summands[1:]: - func = self.instruction_set['-' + suffix] if summand.sign == -1 else self.instruction_set['+' + suffix] - processed = func.format(processed, summand.term) - else: - processed = visit(summands) + processed = summands[0].term + for summand in summands[1:]: + func = self.instruction_set['-' + suffix] if summand.sign == -1 else self.instruction_set['+' + suffix] + processed = func.format(processed, summand.term) return processed def _print_Pow(self, expr): diff --git a/pystencils/cpu/kernelcreation.py b/pystencils/cpu/kernelcreation.py index 6fbd8ff90f1ebc1f03c9a3ba948c3de0bb43efeb..81daf49fcb0fd5a21be37015ad6f142ccdfb8a3c 100644 --- a/pystencils/cpu/kernelcreation.py +++ b/pystencils/cpu/kernelcreation.py @@ -18,7 +18,7 @@ AssignmentOrAstNodeList = List[Union[Assignment, ast.Node]] def create_kernel(assignments: AssignmentOrAstNodeList, function_name: str = "kernel", type_info='double', split_groups=(), iteration_slice=None, ghost_layers=None, - skip_independence_check=False, base_pointer_spec=None) -> KernelFunction: + skip_independence_check=False) -> KernelFunction: """Creates an abstract syntax tree for a kernel function, by taking a list of update rules. Loops are created according to the field accesses in the equations. @@ -39,7 +39,6 @@ def create_kernel(assignments: AssignmentOrAstNodeList, function_name: str = "ke all dimensions skip_independence_check: don't check that loop iterations are independent. This is needed e.g. for periodicity kernel, that access the field outside the iteration bounds. Use with care! - base_pointer_spec: specifies which field accesses are resolved by pointers see :func:`parse_base_pointer_info` Returns: AST node representing a function, that can be printed as C or CUDA code @@ -74,8 +73,7 @@ def create_kernel(assignments: AssignmentOrAstNodeList, function_name: str = "ke typed_split_groups = [[type_symbol(s) for s in split_group] for split_group in split_groups] split_inner_loop(ast_node, typed_split_groups) - if base_pointer_spec is None: - base_pointer_spec = [['spatialInner0'], ['spatialInner1']] if len(loop_order) >= 2 else [['spatialInner0']] + base_pointer_spec = [['spatialInner0'], ['spatialInner1']] if len(loop_order) >= 2 else [['spatialInner0']] base_pointer_info = {field.name: parse_base_pointer_info(base_pointer_spec, loop_order, field.spatial_dimensions, field.index_dimensions) for field in fields_without_buffers} diff --git a/pystencils/gpucuda/kernelcreation.py b/pystencils/gpucuda/kernelcreation.py index e59adea96e5670e0749e53d98350d1f403398a99..52a4dc8bd90e6caa8dd462b0ced27ce33e6c1ae2 100644 --- a/pystencils/gpucuda/kernelcreation.py +++ b/pystencils/gpucuda/kernelcreation.py @@ -15,8 +15,7 @@ def create_cuda_kernel(assignments, iteration_slice=None, ghost_layers=None, skip_independence_check=False, - use_textures_for_interpolation=True, - base_pointer_spec=None): + use_textures_for_interpolation=True): assert assignments, "Assignments must not be empty!" fields_read, fields_written, assignments = add_types(assignments, type_info, not skip_independence_check) all_fields = fields_read.union(fields_written) @@ -74,8 +73,7 @@ def create_cuda_kernel(assignments, implement_interpolations(ast, implement_by_texture_accesses=use_textures_for_interpolation) - if base_pointer_spec is None: - base_pointer_spec = [['spatialInner0']] + base_pointer_spec = [['spatialInner0']] base_pointer_info = {f.name: parse_base_pointer_info(base_pointer_spec, [2, 1, 0], f.spatial_dimensions, f.index_dimensions) for f in all_fields} diff --git a/pystencils/kernelcreation.py b/pystencils/kernelcreation.py index acefc8ad26a3af90d4aafdae154e777baaf23db3..b158754c8716a2d0bdae495ceda59341f945c8d8 100644 --- a/pystencils/kernelcreation.py +++ b/pystencils/kernelcreation.py @@ -31,8 +31,7 @@ def create_kernel(assignments, cpu_prepend_optimizations=[], use_auto_for_assignments=False, opencl_queue=None, - opencl_ctx=None, - base_pointer_spec=None): + opencl_ctx=None): """ Creates abstract syntax tree (AST) of kernel, using a list of update equations. @@ -58,7 +57,6 @@ def create_kernel(assignments, gpu_indexing_params: dict with indexing parameters (constructor parameters of indexing class) e.g. for 'block' one can specify '{'block_size': (20, 20, 10) }' cpu_prepend_optimizations: list of extra optimizations to perform first on the AST - base_pointer_spec: specifies which field accesses are resolved by pointers see :func:`parse_base_pointer_info` Returns: abstract syntax tree (AST) object, that can either be printed as source code with `show_code` or @@ -96,7 +94,7 @@ def create_kernel(assignments, from pystencils.cpu import add_openmp ast = create_kernel(assignments, type_info=data_type, split_groups=split_groups, iteration_slice=iteration_slice, ghost_layers=ghost_layers, - skip_independence_check=skip_independence_check, base_pointer_spec=base_pointer_spec) + skip_independence_check=skip_independence_check) for optimization in cpu_prepend_optimizations: optimization(ast) omp_collapse = None @@ -121,8 +119,7 @@ def create_kernel(assignments, indexing_creator=indexing_creator_from_params(gpu_indexing, gpu_indexing_params), iteration_slice=iteration_slice, ghost_layers=ghost_layers, skip_independence_check=skip_independence_check, - use_textures_for_interpolation=use_textures_for_interpolation, - base_pointer_spec=base_pointer_spec) + use_textures_for_interpolation=use_textures_for_interpolation) if target == 'opencl': from pystencils.opencl.opencljit import make_python_function ast._backend = 'opencl'