From e370c2172cd30127bb0be55ce353a17db074e386 Mon Sep 17 00:00:00 2001 From: Matt Wala <wala1@illinois.edu> Date: Thu, 29 Dec 2016 22:18:56 -0600 Subject: [PATCH] Barrier insertion: respect dependencies where source=target (closes #21 on gitlab). --- loopy/schedule/__init__.py | 2 +- test/test_loopy.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/loopy/schedule/__init__.py b/loopy/schedule/__init__.py index c078da2ec..10408bce9 100644 --- a/loopy/schedule/__init__.py +++ b/loopy/schedule/__init__.py @@ -1528,7 +1528,7 @@ class DependencyTracker(object): source, target = target, source target_deps = self.kernel.recursive_insn_dep_map()[target.id] - if source.id in target_deps: + if source.id == target.id or source.id in target_deps: if self.reverse: dep_descr = "{tgt} rev-depends on {src}" else: diff --git a/test/test_loopy.py b/test/test_loopy.py index db4a38204..bd6466f4a 100644 --- a/test/test_loopy.py +++ b/test/test_loopy.py @@ -2073,6 +2073,26 @@ def test_barrier_insertion_near_bottom_of_loop(): assert_barrier_between(knl, "ainit", "aupdate", ignore_barriers_in_levels=[1]) +def test_barrier_insertion_with_self_dependency(): + import loopy as lp + knl = lp.make_kernel( + "{[i,j]: 0 <=i,j<16}", + """ + <>t = 0 {id=nop0} + for i + for j + <>B[i+1,j] = B[i,j] + end + end + t = 1 {id=nop1} + """, + seq_dependencies=True) + knl = lp.tag_inames(knl, dict(j="l.0")) + knl = lp.set_temporary_scope(knl, "B", "local") + knl = lp.get_one_scheduled_kernel(lp.preprocess_kernel(knl)) + assert_barrier_between(knl, "nop0", "nop1") + + if __name__ == "__main__": if len(sys.argv) > 1: exec(sys.argv[1]) -- GitLab