Skip to content
Snippets Groups Projects
Commit 17ae0d70 authored by Markus Holzer's avatar Markus Holzer
Browse files

Fix PPC test case

parent 61ffa6ec
No related branches found
No related tags found
1 merge request!292Rebase of pystencils Type System
...@@ -61,12 +61,13 @@ def test_vectorized_abs(instruction_set, dtype): ...@@ -61,12 +61,13 @@ def test_vectorized_abs(instruction_set, dtype):
@pytest.mark.parametrize('dtype', ('float', 'double')) @pytest.mark.parametrize('dtype', ('float', 'double'))
@pytest.mark.parametrize('instruction_set', supported_instruction_sets) @pytest.mark.parametrize('instruction_set', supported_instruction_sets)
def test_strided(instruction_set, dtype): def test_strided(instruction_set, dtype):
npdtype = np.float64 if dtype == 'double' else np.float32
type_string = "float64" if dtype == 'double' else "float32" type_string = "float64" if dtype == 'double' else "float32"
f, g = ps.fields(f"f, g : {type_string}[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)] 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'): 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: with pytest.warns(UserWarning) as warn:
config = pystencils.config.CreateKernelConfig(cpu_vectorize_info={'instruction_set': instruction_set}, config = pystencils.config.CreateKernelConfig(cpu_vectorize_info={'instruction_set': instruction_set},
default_number_float=type_string) default_number_float=type_string)
...@@ -78,22 +79,29 @@ def test_strided(instruction_set, dtype): ...@@ -78,22 +79,29 @@ def test_strided(instruction_set, dtype):
default_number_float=type_string) default_number_float=type_string)
ast = ps.create_kernel(update_rule, config=config) ast = ps.create_kernel(update_rule, config=config)
assert len(warn) == 0 assert len(warn) == 0
# ps.show_code(ast) # ps.show_code(ast)
func = ast.compile() 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()
# 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
arr = np.random.random((23 + 2, 17 + 2)).astype(npdtype) dst = np.zeros_like(arr, dtype=type_string)
# print("sum arr: ", np.sum(arr)) ref = np.zeros_like(arr, dtype=type_string)
# print("arr type: ", arr.dtype)
dst = np.zeros_like(arr, dtype=npdtype)
ref = np.zeros_like(arr, dtype=npdtype)
func(g=dst, f=arr) func(g=dst, f=arr)
ref_func(g=ref, f=arr) ref_func(g=ref, f=arr)
# print("dst sum: ", np.sum(dst)) # print("dst: ", dst)
# print("reference sum: ", np.sum(ref)) # print("np array: ", arr)
np.testing.assert_almost_equal(dst, ref, 13 if dtype == 'double' else 5)
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')) @pytest.mark.parametrize('dtype', ('float', 'double'))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment