summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2020-12-19 16:07:22 +0100
committerTamara Dahlgren <dahlgren1@llnl.gov>2021-02-17 17:07:28 -0800
commita4066a52be6efa1f28b39eab4450f2b4f1136baa (patch)
treed2c2853bd9ba18066751b3a177edba2274ad1453
parent18c5f10ae75e80880189d441b7aad6721c566761 (diff)
downloadspack-a4066a52be6efa1f28b39eab4450f2b4f1136baa.tar.gz
spack-a4066a52be6efa1f28b39eab4450f2b4f1136baa.tar.bz2
spack-a4066a52be6efa1f28b39eab4450f2b4f1136baa.tar.xz
spack-a4066a52be6efa1f28b39eab4450f2b4f1136baa.zip
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
-rw-r--r--lib/spack/spack/solver/asp.py15
1 files changed, 11 insertions, 4 deletions
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