From 777fea57b5f0a9464c8e07e5c0ca2b16e73f26f4 Mon Sep 17 00:00:00 2001 From: Kaushik Kulkarni Date: Fri, 3 Aug 2018 11:58:04 -0500 Subject: [PATCH] test_numa_diff should now work. --- loopy/transform/buffer.py | 2 +- loopy/transform/iname.py | 1 + loopy/transform/subst.py | 14 ++++++++++++-- test/test_fortran.py | 2 +- test/test_numa_diff.py | 4 +++- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/loopy/transform/buffer.py b/loopy/transform/buffer.py index b848a6f98..57c4397f9 100644 --- a/loopy/transform/buffer.py +++ b/loopy/transform/buffer.py @@ -245,7 +245,7 @@ def buffer_array_for_single_kernel(kernel, program_callables_info, var_name, from loopy.preprocess import prepare_for_caching key_kernel = prepare_for_caching(kernel) - cache_key = (key_kernel, program_callables_info, var_name, + cache_key = (key_kernel, var_name, tuple(buffer_inames), PymbolicExpressionHashWrapper(init_expression), PymbolicExpressionHashWrapper(store_expression), within, diff --git a/loopy/transform/iname.py b/loopy/transform/iname.py index 0d5f2015e..20dc9a99b 100644 --- a/loopy/transform/iname.py +++ b/loopy/transform/iname.py @@ -1088,6 +1088,7 @@ def has_schedulable_iname_nesting(knl): # {{{ rename_inames +@iterate_over_kernels_if_given_program def rename_iname(knl, old_iname, new_iname, existing_ok=False, within=None): """ :arg within: a stack match as understood by diff --git a/loopy/transform/subst.py b/loopy/transform/subst.py index 0dbc7939e..6a93e0bd9 100644 --- a/loopy/transform/subst.py +++ b/loopy/transform/subst.py @@ -35,6 +35,7 @@ from pymbolic import var from loopy.program import iterate_over_kernels_if_given_program from loopy.kernel import LoopKernel +from loopy.kernel.function_interface import CallableKernel, ScalarCallable import logging logger = logging.getLogger(__name__) @@ -508,8 +509,17 @@ def find_rules_matching(knl, pattern): return [r for r in knl.substitutions if pattern.match(r)] -def find_one_rule_matching(knl, pattern): - rules = find_rules_matching(knl, pattern) +def find_one_rule_matching(program, pattern): + rules = [] + for in_knl_callable in program.program_callables_info.values(): + if isinstance(in_knl_callable, CallableKernel): + knl = in_knl_callable.subkernel + rules.extend(find_rules_matching(knl, pattern)) + elif isinstance(in_knl_callable, ScalarCallable): + pass + else: + raise NotImplementedError("Unknown callable types %s." % ( + type(in_knl_callable).__name__)) if len(rules) > 1: raise ValueError("more than one substitution rule matched '%s'" diff --git a/test/test_fortran.py b/test/test_fortran.py index deca4d42e..1a5a0c383 100644 --- a/test/test_fortran.py +++ b/test/test_fortran.py @@ -410,7 +410,7 @@ def test_fuse_kernels(ctx_factory): knl = lp.fuse_kernels((xderiv, yderiv), data_flow=[("result", 0, 1)]) knl = lp.prioritize_loops(knl, "e,i,j,k") - assert len(knl.temporary_variables) == 2 + assert len(knl.root_kernel.temporary_variables) == 2 ctx = ctx_factory() lp.auto_test_vs_ref(xyderiv, ctx, knl, parameters=dict(nelements=20, ndofs=4)) diff --git a/test/test_numa_diff.py b/test/test_numa_diff.py index 6b578838d..4f802f8bf 100644 --- a/test/test_numa_diff.py +++ b/test/test_numa_diff.py @@ -246,7 +246,9 @@ def test_gnuma_horiz_kernel(ctx_factory, ilp_multiple, Nq, opt_level): # noqa "-cl-no-signed-zeros", ]) - hsv = hsv.copy(name="horizontalStrongVolumeKernel") + # FIXME: renaming's a bit tricky in this program model. + # add a simple transformation for it + # hsv = hsv.copy(name="horizontalStrongVolumeKernel") results = lp.auto_test_vs_ref(ref_hsv, ctx, hsv, parameters=dict(elements=300), quiet=True) -- GitLab