From 5518ad9611161d39ce96970aa569a570dc66d3fc Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Tue, 11 Feb 2025 18:54:32 +0100 Subject: [PATCH] Fix performance issue on macOS (#48997) archspec.cpu.host() is not memoized, so compute it as less as possible. --------- Co-authored-by: alalazo --- lib/spack/spack/solver/input_analysis.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/spack/spack/solver/input_analysis.py b/lib/spack/spack/solver/input_analysis.py index c316402288d..16ecaea4495 100644 --- a/lib/spack/spack/solver/input_analysis.py +++ b/lib/spack/spack/solver/input_analysis.py @@ -72,6 +72,9 @@ def __init__(self, *, configuration: spack.config.Configuration, repo: spack.rep self.repo = repo self.runtime_pkgs = set(self.repo.packages_with_tags(RUNTIME_TAG)) self.runtime_virtuals = set() + self._platform_condition = spack.spec.Spec( + f"platform={spack.platforms.host()} target={archspec.cpu.host().family}:" + ) for x in self.runtime_pkgs: pkg_class = self.repo.get_pkg_class(x) self.runtime_virtuals.update(pkg_class.provided_virtual_names()) @@ -88,14 +91,11 @@ def is_virtual(self, name: str) -> bool: def is_allowed_on_this_platform(self, *, pkg_name: str) -> bool: """Returns true if a package is allowed on the current host""" pkg_cls = self.repo.get_pkg_class(pkg_name) - platform_condition = ( - f"platform={spack.platforms.host()} target={archspec.cpu.host().family}:" - ) for when_spec, conditions in pkg_cls.requirements.items(): - if not when_spec.intersects(platform_condition): + if not when_spec.intersects(self._platform_condition): continue for requirements, _, _ in conditions: - if not any(x.intersects(platform_condition) for x in requirements): + if not any(x.intersects(self._platform_condition) for x in requirements): tty.debug(f"[{__name__}] {pkg_name} is not for this platform") return False return True