From a4066a52be6efa1f28b39eab4450f2b4f1136baa Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Sat, 19 Dec 2020 16:07:22 +0100 Subject: asp: memoize the list of all target_specs to speed-up setup phase (#20473) * asp: memoize the list of all target_specs to speed-up setup phase * asp: memoize using a cache per solver object --- lib/spack/spack/solver/asp.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/spack/spack/solver/asp.py b/lib/spack/spack/solver/asp.py index 8ab0809ca8..87536570c6 100644 --- a/lib/spack/spack/solver/asp.py +++ b/lib/spack/spack/solver/asp.py @@ -497,6 +497,9 @@ class SpackSolverSetup(object): # id for dummy variables self.card = 0 + # Caches to optimize the setup phase of the solver + self.target_specs_cache = None + def pkg_version_rules(self, pkg): """Output declared versions of a package. @@ -910,10 +913,14 @@ class SpackSolverSetup(object): def preferred_targets(self, pkg_name): key_fn = spack.package_prefs.PackagePrefs(pkg_name, 'target') - target_specs = [ - spack.spec.Spec('target={0}'.format(target_name)) - for target_name in archspec.cpu.TARGETS - ] + + if not self.target_specs_cache: + self.target_specs_cache = [ + spack.spec.Spec('target={0}'.format(target_name)) + for target_name in archspec.cpu.TARGETS + ] + + target_specs = self.target_specs_cache preferred_targets = [x for x in target_specs if key_fn(x) < 0] if not preferred_targets: return -- cgit v1.2.3-60-g2f50