From 1ae906bf084e6f7e8f2851ba880c9db49b039871 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Tue, 9 Aug 2011 11:48:24 +0200 Subject: [PATCH] Introduce notion of a 'unique' tag. (ILP et al are not unique, for example.) --- loopy/__init__.py | 2 +- loopy/kernel.py | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/loopy/__init__.py b/loopy/__init__.py index f21301d30..049327d03 100644 --- a/loopy/__init__.py +++ b/loopy/__init__.py @@ -11,7 +11,7 @@ register_mpz_with_pymbolic() -# TODO: Constant memory +# TODO: Constant memory (plus check for count) # TODO: Reuse of previously split dimensions for prefetch # (Or general merging) diff --git a/loopy/kernel.py b/loopy/kernel.py index 21bf43a44..6f14113a5 100644 --- a/loopy/kernel.py +++ b/loopy/kernel.py @@ -83,16 +83,18 @@ class IndexTag(Record): def __hash__(self): raise RuntimeError("use .key to hash index tags") - @property - def key(self): - return type(self) class ParallelTag(IndexTag): pass -class ParallelTagWithAxis(ParallelTag): +class UniqueTag(IndexTag): + @property + def key(self): + return type(self) + +class ParallelTagWithAxis(ParallelTag, UniqueTag): __slots__ = ["axis", "forced_length"] def __init__(self, axis, forced_length=None): @@ -222,7 +224,8 @@ class LoopKernel(Record): def tag_key_to_iname(self): return dict( (tag.key, iname) - for iname, tag in self.iname_to_tag.iteritems()) + for iname, tag in self.iname_to_tag.iteritems() + if isinstance(tag, UniqueTag)) @property @memoize_method @@ -396,11 +399,12 @@ class LoopKernel(Record): new_tag_keys = set(tag.key for tag in [outer_tag, inner_tag] - if tag is not None) + if tag is not None + if isinstance(tag, UniqueTag)) repeated_tag_keys = new_tag_keys & set( - tag.key for tag in - self.iname_to_tag.itervalues()) + tag.key for tag in self.iname_to_tag.itervalues() + if isinstance(tag, UniqueTag)) if repeated_tag_keys: raise RuntimeError("repeated tag(s): %s" % repeated_tag_keys) -- GitLab