From 65247f4a1275c8ecf33312d678a6874449969c9d Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 9 Jul 2013 00:52:20 -0400 Subject: [PATCH] Write subscripts also count as read deps: fix, add test --- loopy/kernel/data.py | 8 +++++++- test/test_loopy.py | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py index 832096a32..94ae93f3f 100644 --- a/loopy/kernel/data.py +++ b/loopy/kernel/data.py @@ -509,7 +509,10 @@ class ExpressionInstruction(InstructionBase): @memoize_method def read_dependency_names(self): from loopy.symbolic import get_dependencies - return get_dependencies(self.expression) + result = get_dependencies(self.expression) + for _, subscript in self.assignees_and_indices(): + result = result | get_dependencies(subscript) + return result @memoize_method def reduction_inames(self): @@ -680,6 +683,9 @@ class CInstruction(InstructionBase): for name, iname_expr in self.iname_exprs: result.update(get_dependencies(iname_expr)) + for _, subscript in self.assignees_and_indices(): + result.update(get_dependencies(subscript)) + return frozenset(result) def reduction_inames(self): diff --git a/test/test_loopy.py b/test/test_loopy.py index e1a05380d..0efcaab05 100644 --- a/test/test_loopy.py +++ b/test/test_loopy.py @@ -1227,6 +1227,26 @@ def test_dependent_domain_insn_iname_finding(ctx_factory): )) +def test_inames_deps_from_write_subscript(ctx_factory): + ctx = ctx_factory() + + knl = lp.make_kernel(ctx.devices[0], [ + "{[i,j]: 0<=i,j src_ibox = source_boxes[i] + something = 5 + a[src_ibox] = sum(j, something) {id=myred} + """, + [ + lp.GlobalArg("box_source_starts,box_source_counts_nonchild,a", + None, shape=None), + "..."]) + + print knl + assert "i" in knl.insn_inames("myred") + + if __name__ == "__main__": if len(sys.argv) > 1: exec(sys.argv[1]) -- GitLab