diff --git a/conftest.py b/conftest.py index 131167994d7cc31ae919ee7fb51bb5897fcdc995..3c140f19efdea93fcd5f6b94c7f706b7a1c77ef2 100644 --- a/conftest.py +++ b/conftest.py @@ -82,10 +82,6 @@ try: except ImportError: collect_ignore += [os.path.join(SCRIPT_FOLDER, "pystencils/datahandling/vtk.py")] -# TODO: Remove if Ubuntu 18.04 is no longer supported -if pytest_version < 50403: - collect_ignore += [os.path.join(SCRIPT_FOLDER, "pystencils_tests/test_jupyter_extensions.ipynb")] - collect_ignore += [os.path.join(SCRIPT_FOLDER, 'setup.py')] for root, sub_dirs, files in os.walk('.'): diff --git a/pystencils/cpu/vectorization.py b/pystencils/cpu/vectorization.py index 6d59be9b0c35692d364e971ff190f32590b923d1..9f8e381c3f3f16627cdfecd6caa4e46e648f7efc 100644 --- a/pystencils/cpu/vectorization.py +++ b/pystencils/cpu/vectorization.py @@ -77,6 +77,8 @@ class CachelineSize(ast.Node): def vectorize(kernel_ast: ast.KernelFunction, instruction_set: str = 'best', assume_aligned: bool = False, nontemporal: Union[bool, Container[Union[str, Field]]] = False, assume_inner_stride_one: bool = False, assume_sufficient_line_padding: bool = True): + # TODO we first introduce the remainder loop and then check if we can even vectorise. Maybe first copy the ast + # and return the copied version on failure """Explicit vectorization using SIMD vectorization via intrinsics. Args: diff --git a/pystencils_tests/test_vectorization_specific.py b/pystencils_tests/test_vectorization_specific.py index 44274156eff8e1bbf07be0eeffad5919492bfb83..9b9d34694ccd63a4ab3a5aa4ce4f7df23b10f897 100644 --- a/pystencils_tests/test_vectorization_specific.py +++ b/pystencils_tests/test_vectorization_specific.py @@ -61,33 +61,46 @@ def test_vectorized_abs(instruction_set, dtype): @pytest.mark.parametrize('dtype', ('float', 'double')) @pytest.mark.parametrize('instruction_set', supported_instruction_sets) def test_strided(instruction_set, dtype): - npdtype = np.float64 if dtype == 'double' else np.float32 + type_string = "float64" if dtype == 'double' else "float32" - f, g = ps.fields(f"f, g : float{64 if dtype=='double' else 32}[2D]") + f, g = ps.fields(f"f, g : {type_string}[2D]") update_rule = [ps.Assignment(g[0, 0], f[0, 0] + f[-1, 0] + f[1, 0] + f[0, 1] + f[0, -1] + 42.0)] if 'storeS' not in get_vector_instruction_set(dtype, instruction_set) and instruction_set not in ['avx512', 'rvv'] and not instruction_set.startswith('sve'): with pytest.warns(UserWarning) as warn: config = pystencils.config.CreateKernelConfig(cpu_vectorize_info={'instruction_set': instruction_set}, - default_number_float=npdtype) + default_number_float=type_string) ast = ps.create_kernel(update_rule, config=config) assert 'Could not vectorize loop' in warn[0].message.args[0] else: with pytest.warns(None) as warn: config = pystencils.config.CreateKernelConfig(cpu_vectorize_info={'instruction_set': instruction_set}, - default_number_float=npdtype) + default_number_float=type_string) ast = ps.create_kernel(update_rule, config=config) assert len(warn) == 0 - # ps.show_code(ast) + + ps.show_code(ast) func = ast.compile() - ref_func = ps.create_kernel(update_rule).compile() + ref_config = pystencils.config.CreateKernelConfig(default_number_float=type_string) + ref_func = ps.create_kernel(update_rule, config=ref_config).compile() - arr = np.random.random((23 + 2, 17 + 2)).astype(npdtype) - dst = np.zeros_like(arr, dtype=npdtype) - ref = np.zeros_like(arr, dtype=npdtype) + # For some reason other array creations fail on the emulated ppc pipeline + size = (25, 19) + arr = np.zeros(size).astype(type_string) + for i in range(size[0]): + for j in range(size[1]): + arr[i, j] = i * j + + + dst = np.zeros_like(arr, dtype=type_string) + ref = np.zeros_like(arr, dtype=type_string) func(g=dst, f=arr) ref_func(g=ref, f=arr) - np.testing.assert_almost_equal(dst, ref, 13 if dtype == 'double' else 5) + + print("dst: ", dst) + print("np array: ", arr) + + np.testing.assert_almost_equal(dst[1:-1, 1:-1], ref[1:-1, 1:-1], 13 if dtype == 'double' else 5) @pytest.mark.parametrize('dtype', ('float', 'double'))