From 3c760bee62935e60b9d92a6ca9856481d16bb768 Mon Sep 17 00:00:00 2001 From: Matt Wala <wala1@illinois.edu> Date: Sat, 15 Jul 2017 18:34:15 -0500 Subject: [PATCH] Fix TemporaryVariable.update_persistent_hash() to handle storage shapes which contain pymbolic expressions. --- loopy/kernel/array.py | 20 ++++++++++++-------- loopy/kernel/data.py | 5 +++-- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/loopy/kernel/array.py b/loopy/kernel/array.py index a02fc58d9..dab338486 100644 --- a/loopy/kernel/array.py +++ b/loopy/kernel/array.py @@ -862,6 +862,17 @@ class ArrayBase(ImmutableRecord): def __repr__(self): return "<%s>" % self.__str__() + def update_persistent_hash_for_shape(self, key_hash, key_builder, shape): + if isinstance(shape, tuple): + for shape_i in shape: + if shape_i is None: + key_builder.rec(key_hash, shape_i) + else: + key_builder.update_for_pymbolic_expression(key_hash, shape_i) + else: + key_builder.rec(key_hash, shape) + + def update_persistent_hash(self, key_hash, key_builder): """Custom hash computation function for use with :class:`pytools.persistent_dict.PersistentDict`. @@ -869,14 +880,7 @@ class ArrayBase(ImmutableRecord): key_builder.rec(key_hash, self.name) key_builder.rec(key_hash, self.dtype) - if isinstance(self.shape, tuple): - for shape_i in self.shape: - if shape_i is None: - key_builder.rec(key_hash, shape_i) - else: - key_builder.update_for_pymbolic_expression(key_hash, shape_i) - else: - key_builder.rec(key_hash, self.shape) + self.update_persistent_hash_for_shape(key_hash, key_builder, self.shape) key_builder.rec(key_hash, self.dim_tags) key_builder.rec(key_hash, self.offset) key_builder.rec(key_hash, self.dim_names) diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py index 001dd0632..94b31df12 100644 --- a/loopy/kernel/data.py +++ b/loopy/kernel/data.py @@ -497,7 +497,8 @@ class TemporaryVariable(ArrayBase): """ super(TemporaryVariable, self).update_persistent_hash(key_hash, key_builder) - key_builder.rec(key_hash, self.storage_shape) + self.update_persistent_hash_for_shape(key_hash, key_builder, + self.storage_shape) key_builder.rec(key_hash, self.base_indices) initializer = self.initializer @@ -510,7 +511,7 @@ class TemporaryVariable(ArrayBase): # }}} -# {{{ subsitution rule +# {{{ substitution rule class SubstitutionRule(ImmutableRecord): """ -- GitLab