From 28c6d334503ef18b086904b00be5d33af98f1e7a Mon Sep 17 00:00:00 2001 From: Markus Holzer <markus.holzer@fau.de> Date: Wed, 12 Oct 2022 12:25:59 +0200 Subject: [PATCH] Fix issue 62 --- pystencils/backends/cbackend.py | 10 ---------- pystencils/cpu/vectorization.py | 4 +++- pystencils_tests/test_vectorization.py | 20 -------------------- 3 files changed, 3 insertions(+), 31 deletions(-) diff --git a/pystencils/backends/cbackend.py b/pystencils/backends/cbackend.py index c11fe37b..e06c2989 100644 --- a/pystencils/backends/cbackend.py +++ b/pystencils/backends/cbackend.py @@ -661,16 +661,6 @@ class VectorizedCustomSympyPrinter(CustomSympyPrinter): # if k in code: # return code.replace(k, f'{k}f') # raise ValueError(f"{code} doesn't give {known=} function back.") - # elif isinstance(arg, sp.UnevaluatedExpr): - # unevaluated_expression = arg.args[0] - # test = self._print_Mul(unevaluated_expression, inside_add=True) - # # printed_args = [self._typed_vectorized_symbol(a, data_type) for a in arg.args] - # printed_args = [self._print(a) for a in unevaluated_expression.args] - # return test[1] - # - # # return self.instruction_set[instruction].format(*printed_args, **self._kwargs) - # - # return printed_args else: raise NotImplementedError('Vectorizer cannot cast between different datatypes') # to_type = self.instruction_set['suffix'][data_type.base_type.c_name] diff --git a/pystencils/cpu/vectorization.py b/pystencils/cpu/vectorization.py index 3adcbc31..c1362d34 100644 --- a/pystencils/cpu/vectorization.py +++ b/pystencils/cpu/vectorization.py @@ -320,7 +320,9 @@ def insert_vector_casts(ast_node, instruction_set, default_float_type='double'): for a, t in zip(new_conditions, types_of_conditions)] return sp.Piecewise(*[(r, c) for r, c in zip(casted_results, casted_conditions)]) - elif isinstance(expr, (sp.Number, TypedSymbol, BooleanAtom)): + elif isinstance(expr, TypedSymbol): + return CastFunc(expr, VectorType(expr.dtype, instruction_set['width'])) + elif isinstance(expr, (sp.Number, BooleanAtom)): return expr else: raise NotImplementedError(f'Due to defensive programming we handle only specific expressions.\n' diff --git a/pystencils_tests/test_vectorization.py b/pystencils_tests/test_vectorization.py index 10898bbf..6ea6b70b 100644 --- a/pystencils_tests/test_vectorization.py +++ b/pystencils_tests/test_vectorization.py @@ -40,26 +40,6 @@ def test_vector_type_propagation(instruction_set=instruction_set): np.testing.assert_equal(dst[1:-1, 1:-1], 2 * 10.0 + 3) -def test_vectorised_multiplication(instruction_set=instruction_set): - instructions = get_vector_instruction_set(instruction_set=instruction_set) - a, b = sp.symbols("a b") - f = ps.fields("f:[2D]") - - update_rule = ps.Assignment(f[0, 0], a * b) - - ast = ps.create_kernel(update_rule) - print(instruction_set) - vectorize(ast, instruction_set=instruction_set) - - # ps.show_code(ast) - - func = ast.compile() - code = ps.get_code_str(ast) - - mul_instruction = instructions["*"][:instructions["*"].find("(")] - assert mul_instruction in code - - @pytest.mark.parametrize('openmp', [True, False]) def test_aligned_and_nt_stores(openmp, instruction_set=instruction_set): domain_size = (24, 24) -- GitLab