From c7294fe8dd9ad6b14e3f5730a10df0c7bff0ff31 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Sat, 3 Jun 2017 14:10:45 -0400 Subject: [PATCH] Pickle loopy kernels with their persistent hash key, to avoid expensive re-hashes once reloaded --- loopy/kernel/__init__.py | 22 ++++++++++++++++++++-- loopy/version.py | 2 +- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/loopy/kernel/__init__.py b/loopy/kernel/__init__.py index e5305b703..dccaca2ec 100644 --- a/loopy/kernel/__init__.py +++ b/loopy/kernel/__init__.py @@ -1400,17 +1400,35 @@ class LoopKernel(ImmutableRecordWithoutPickling): result.pop("cache_manager", None) - return result + # make sure that kernels are pickled with a cached hash key in place + from loopy.tools import LoopyKeyBuilder + LoopyKeyBuilder()(self) + + return (result, self._pytools_persistent_hash_digest) def __setstate__(self, state): + attribs, p_hash_digest = state + new_fields = set() - for k, v in six.iteritems(state): + for k, v in six.iteritems(attribs): setattr(self, k, v) new_fields.add(k) self.register_fields(new_fields) + if 0: + # {{{ check that 'reconstituted' object has same hash + + from loopy.tools import LoopyKeyBuilder + LoopyKeyBuilder()(self) + + assert p_hash_digest == self._pytools_persistent_hash_digest + + # }}} + else: + self._pytools_persistent_hash_digest = p_hash_digest + from loopy.kernel.tools import SetOperationCacheManager self.cache_manager = SetOperationCacheManager() self._kernel_executor_cache = {} diff --git a/loopy/version.py b/loopy/version.py index 4c6dfbcc2..8516ce006 100644 --- a/loopy/version.py +++ b/loopy/version.py @@ -32,4 +32,4 @@ except ImportError: else: _islpy_version = islpy.version.VERSION_TEXT -DATA_MODEL_VERSION = "v62-islpy%s" % _islpy_version +DATA_MODEL_VERSION = "v63-islpy%s" % _islpy_version -- GitLab