Update archspec to v0.2.5-dev (7e6740012b897ae4a950f0bba7e9726b767e921f) (#45721)
This commit is contained in:
parent
4da21d8f60
commit
bd9186038a
5 changed files with 168 additions and 37 deletions
2
lib/spack/external/__init__.py
vendored
2
lib/spack/external/__init__.py
vendored
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
* Homepage: https://pypi.python.org/pypi/archspec
|
* Homepage: https://pypi.python.org/pypi/archspec
|
||||||
* Usage: Labeling, comparison and detection of microarchitectures
|
* Usage: Labeling, comparison and detection of microarchitectures
|
||||||
* Version: 0.2.4 (commit 48b92512b9ce203ded0ebd1ac41b42593e931f7c)
|
* Version: 0.2.5-dev (commit 7e6740012b897ae4a950f0bba7e9726b767e921f)
|
||||||
|
|
||||||
astunparse
|
astunparse
|
||||||
----------------
|
----------------
|
||||||
|
|
12
lib/spack/external/archspec/cpu/detect.py
vendored
12
lib/spack/external/archspec/cpu/detect.py
vendored
|
@ -47,7 +47,11 @@ def decorator(factory):
|
||||||
|
|
||||||
|
|
||||||
def partial_uarch(
|
def partial_uarch(
|
||||||
name: str = "", vendor: str = "", features: Optional[Set[str]] = None, generation: int = 0
|
name: str = "",
|
||||||
|
vendor: str = "",
|
||||||
|
features: Optional[Set[str]] = None,
|
||||||
|
generation: int = 0,
|
||||||
|
cpu_part: str = "",
|
||||||
) -> Microarchitecture:
|
) -> Microarchitecture:
|
||||||
"""Construct a partial microarchitecture, from information gathered during system scan."""
|
"""Construct a partial microarchitecture, from information gathered during system scan."""
|
||||||
return Microarchitecture(
|
return Microarchitecture(
|
||||||
|
@ -57,6 +61,7 @@ def partial_uarch(
|
||||||
features=features or set(),
|
features=features or set(),
|
||||||
compilers={},
|
compilers={},
|
||||||
generation=generation,
|
generation=generation,
|
||||||
|
cpu_part=cpu_part,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -90,6 +95,7 @@ def proc_cpuinfo() -> Microarchitecture:
|
||||||
return partial_uarch(
|
return partial_uarch(
|
||||||
vendor=_canonicalize_aarch64_vendor(data),
|
vendor=_canonicalize_aarch64_vendor(data),
|
||||||
features=_feature_set(data, key="Features"),
|
features=_feature_set(data, key="Features"),
|
||||||
|
cpu_part=data.get("CPU part", ""),
|
||||||
)
|
)
|
||||||
|
|
||||||
if architecture in (PPC64LE, PPC64):
|
if architecture in (PPC64LE, PPC64):
|
||||||
|
@ -345,6 +351,10 @@ def sorting_fn(item):
|
||||||
generic_candidates = [c for c in candidates if c.vendor == "generic"]
|
generic_candidates = [c for c in candidates if c.vendor == "generic"]
|
||||||
best_generic = max(generic_candidates, key=sorting_fn)
|
best_generic = max(generic_candidates, key=sorting_fn)
|
||||||
|
|
||||||
|
# Relevant for AArch64. Filter on "cpu_part" if we have any match
|
||||||
|
if info.cpu_part != "" and any(c for c in candidates if info.cpu_part == c.cpu_part):
|
||||||
|
candidates = [c for c in candidates if info.cpu_part == c.cpu_part]
|
||||||
|
|
||||||
# Filter the candidates to be descendant of the best generic candidate.
|
# Filter the candidates to be descendant of the best generic candidate.
|
||||||
# This is to avoid that the lack of a niche feature that can be disabled
|
# This is to avoid that the lack of a niche feature that can be disabled
|
||||||
# from e.g. BIOS prevents detection of a reasonably performant architecture
|
# from e.g. BIOS prevents detection of a reasonably performant architecture
|
||||||
|
|
|
@ -2,9 +2,7 @@
|
||||||
# Archspec Project Developers. See the top-level COPYRIGHT file for details.
|
# Archspec Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
"""Types and functions to manage information
|
"""Types and functions to manage information on CPU microarchitectures."""
|
||||||
on CPU microarchitectures.
|
|
||||||
"""
|
|
||||||
import functools
|
import functools
|
||||||
import platform
|
import platform
|
||||||
import re
|
import re
|
||||||
|
@ -65,21 +63,24 @@ class Microarchitecture:
|
||||||
passed in as argument above.
|
passed in as argument above.
|
||||||
* versions: versions that support this micro-architecture.
|
* versions: versions that support this micro-architecture.
|
||||||
|
|
||||||
generation (int): generation of the micro-architecture, if
|
generation (int): generation of the micro-architecture, if relevant.
|
||||||
relevant.
|
cpu_part (str): cpu part of the architecture, if relevant.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# pylint: disable=too-many-arguments
|
# pylint: disable=too-many-arguments,too-many-instance-attributes
|
||||||
#: Aliases for micro-architecture's features
|
#: Aliases for micro-architecture's features
|
||||||
feature_aliases = FEATURE_ALIASES
|
feature_aliases = FEATURE_ALIASES
|
||||||
|
|
||||||
def __init__(self, name, parents, vendor, features, compilers, generation=0):
|
def __init__(self, name, parents, vendor, features, compilers, generation=0, cpu_part=""):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.parents = parents
|
self.parents = parents
|
||||||
self.vendor = vendor
|
self.vendor = vendor
|
||||||
self.features = features
|
self.features = features
|
||||||
self.compilers = compilers
|
self.compilers = compilers
|
||||||
|
# Only relevant for PowerPC
|
||||||
self.generation = generation
|
self.generation = generation
|
||||||
|
# Only relevant for AArch64
|
||||||
|
self.cpu_part = cpu_part
|
||||||
# Cache the ancestor computation
|
# Cache the ancestor computation
|
||||||
self._ancestors = None
|
self._ancestors = None
|
||||||
|
|
||||||
|
@ -111,6 +112,7 @@ def __eq__(self, other):
|
||||||
and self.parents == other.parents # avoid ancestors here
|
and self.parents == other.parents # avoid ancestors here
|
||||||
and self.compilers == other.compilers
|
and self.compilers == other.compilers
|
||||||
and self.generation == other.generation
|
and self.generation == other.generation
|
||||||
|
and self.cpu_part == other.cpu_part
|
||||||
)
|
)
|
||||||
|
|
||||||
@coerce_target_names
|
@coerce_target_names
|
||||||
|
@ -143,7 +145,8 @@ def __repr__(self):
|
||||||
cls_name = self.__class__.__name__
|
cls_name = self.__class__.__name__
|
||||||
fmt = (
|
fmt = (
|
||||||
cls_name + "({0.name!r}, {0.parents!r}, {0.vendor!r}, "
|
cls_name + "({0.name!r}, {0.parents!r}, {0.vendor!r}, "
|
||||||
"{0.features!r}, {0.compilers!r}, {0.generation!r})"
|
"{0.features!r}, {0.compilers!r}, generation={0.generation!r}, "
|
||||||
|
"cpu_part={0.cpu_part!r})"
|
||||||
)
|
)
|
||||||
return fmt.format(self)
|
return fmt.format(self)
|
||||||
|
|
||||||
|
@ -190,6 +193,7 @@ def to_dict(self):
|
||||||
"generation": self.generation,
|
"generation": self.generation,
|
||||||
"parents": [str(x) for x in self.parents],
|
"parents": [str(x) for x in self.parents],
|
||||||
"compilers": self.compilers,
|
"compilers": self.compilers,
|
||||||
|
"cpupart": self.cpu_part,
|
||||||
}
|
}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -202,6 +206,7 @@ def from_dict(data) -> "Microarchitecture":
|
||||||
features=set(data["features"]),
|
features=set(data["features"]),
|
||||||
compilers=data.get("compilers", {}),
|
compilers=data.get("compilers", {}),
|
||||||
generation=data.get("generation", 0),
|
generation=data.get("generation", 0),
|
||||||
|
cpu_part=data.get("cpupart", ""),
|
||||||
)
|
)
|
||||||
|
|
||||||
def optimization_flags(self, compiler, version):
|
def optimization_flags(self, compiler, version):
|
||||||
|
@ -360,8 +365,11 @@ def fill_target_from_dict(name, data, targets):
|
||||||
features = set(values["features"])
|
features = set(values["features"])
|
||||||
compilers = values.get("compilers", {})
|
compilers = values.get("compilers", {})
|
||||||
generation = values.get("generation", 0)
|
generation = values.get("generation", 0)
|
||||||
|
cpu_part = values.get("cpupart", "")
|
||||||
|
|
||||||
targets[name] = Microarchitecture(name, parents, vendor, features, compilers, generation)
|
targets[name] = Microarchitecture(
|
||||||
|
name, parents, vendor, features, compilers, generation=generation, cpu_part=cpu_part
|
||||||
|
)
|
||||||
|
|
||||||
known_targets = {}
|
known_targets = {}
|
||||||
data = archspec.cpu.schema.TARGETS_JSON["microarchitectures"]
|
data = archspec.cpu.schema.TARGETS_JSON["microarchitectures"]
|
||||||
|
|
|
@ -2225,10 +2225,14 @@
|
||||||
],
|
],
|
||||||
"nvhpc": [
|
"nvhpc": [
|
||||||
{
|
{
|
||||||
"versions": "21.11:",
|
"versions": "21.11:23.8",
|
||||||
"name": "zen3",
|
"name": "zen3",
|
||||||
"flags": "-tp {name}",
|
"flags": "-tp {name}",
|
||||||
"warnings": "zen4 is not fully supported by nvhpc yet, falling back to zen3"
|
"warnings": "zen4 is not fully supported by nvhpc versions < 23.9, falling back to zen3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "23.9:",
|
||||||
|
"flags": "-tp {name}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -2711,7 +2715,8 @@
|
||||||
"flags": "-mcpu=thunderx2t99"
|
"flags": "-mcpu=thunderx2t99"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"cpupart": "0x0af"
|
||||||
},
|
},
|
||||||
"a64fx": {
|
"a64fx": {
|
||||||
"from": ["armv8.2a"],
|
"from": ["armv8.2a"],
|
||||||
|
@ -2779,7 +2784,8 @@
|
||||||
"flags": "-march=armv8.2-a+crc+crypto+fp16+sve"
|
"flags": "-march=armv8.2-a+crc+crypto+fp16+sve"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"cpupart": "0x001"
|
||||||
},
|
},
|
||||||
"cortex_a72": {
|
"cortex_a72": {
|
||||||
"from": ["aarch64"],
|
"from": ["aarch64"],
|
||||||
|
@ -2816,7 +2822,8 @@
|
||||||
"flags" : "-mcpu=cortex-a72"
|
"flags" : "-mcpu=cortex-a72"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"cpupart": "0xd08"
|
||||||
},
|
},
|
||||||
"neoverse_n1": {
|
"neoverse_n1": {
|
||||||
"from": ["cortex_a72", "armv8.2a"],
|
"from": ["cortex_a72", "armv8.2a"],
|
||||||
|
@ -2902,7 +2909,8 @@
|
||||||
"flags": "-tp {name}"
|
"flags": "-tp {name}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"cpupart": "0xd0c"
|
||||||
},
|
},
|
||||||
"neoverse_v1": {
|
"neoverse_v1": {
|
||||||
"from": ["neoverse_n1", "armv8.4a"],
|
"from": ["neoverse_n1", "armv8.4a"],
|
||||||
|
@ -2926,8 +2934,6 @@
|
||||||
"lrcpc",
|
"lrcpc",
|
||||||
"dcpop",
|
"dcpop",
|
||||||
"sha3",
|
"sha3",
|
||||||
"sm3",
|
|
||||||
"sm4",
|
|
||||||
"asimddp",
|
"asimddp",
|
||||||
"sha512",
|
"sha512",
|
||||||
"sve",
|
"sve",
|
||||||
|
@ -3028,7 +3034,8 @@
|
||||||
"flags": "-tp {name}"
|
"flags": "-tp {name}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"cpupart": "0xd40"
|
||||||
},
|
},
|
||||||
"neoverse_v2": {
|
"neoverse_v2": {
|
||||||
"from": ["neoverse_n1", "armv9.0a"],
|
"from": ["neoverse_n1", "armv9.0a"],
|
||||||
|
@ -3052,13 +3059,10 @@
|
||||||
"lrcpc",
|
"lrcpc",
|
||||||
"dcpop",
|
"dcpop",
|
||||||
"sha3",
|
"sha3",
|
||||||
"sm3",
|
|
||||||
"sm4",
|
|
||||||
"asimddp",
|
"asimddp",
|
||||||
"sha512",
|
"sha512",
|
||||||
"sve",
|
"sve",
|
||||||
"asimdfhm",
|
"asimdfhm",
|
||||||
"dit",
|
|
||||||
"uscat",
|
"uscat",
|
||||||
"ilrcpc",
|
"ilrcpc",
|
||||||
"flagm",
|
"flagm",
|
||||||
|
@ -3066,18 +3070,12 @@
|
||||||
"sb",
|
"sb",
|
||||||
"dcpodp",
|
"dcpodp",
|
||||||
"sve2",
|
"sve2",
|
||||||
"sveaes",
|
|
||||||
"svepmull",
|
|
||||||
"svebitperm",
|
|
||||||
"svesha3",
|
|
||||||
"svesm4",
|
|
||||||
"flagm2",
|
"flagm2",
|
||||||
"frint",
|
"frint",
|
||||||
"svei8mm",
|
"svei8mm",
|
||||||
"svebf16",
|
"svebf16",
|
||||||
"i8mm",
|
"i8mm",
|
||||||
"bf16",
|
"bf16"
|
||||||
"dgh"
|
|
||||||
],
|
],
|
||||||
"compilers" : {
|
"compilers" : {
|
||||||
"gcc": [
|
"gcc": [
|
||||||
|
@ -3102,15 +3100,19 @@
|
||||||
"flags" : "-march=armv8.5-a+sve -mtune=cortex-a76"
|
"flags" : "-march=armv8.5-a+sve -mtune=cortex-a76"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"versions": "10.0:11.99",
|
"versions": "10.0:11.3.99",
|
||||||
"flags" : "-march=armv8.5-a+sve+sve2+i8mm+bf16 -mtune=cortex-a77"
|
"flags" : "-march=armv8.5-a+sve+sve2+i8mm+bf16 -mtune=cortex-a77"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"versions": "12.0:12.99",
|
"versions": "11.4:11.99",
|
||||||
|
"flags" : "-mcpu=neoverse-v2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "12.0:12.2.99",
|
||||||
"flags" : "-march=armv9-a+i8mm+bf16 -mtune=cortex-a710"
|
"flags" : "-march=armv9-a+i8mm+bf16 -mtune=cortex-a710"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"versions": "13.0:",
|
"versions": "12.3:",
|
||||||
"flags" : "-mcpu=neoverse-v2"
|
"flags" : "-mcpu=neoverse-v2"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -3145,7 +3147,113 @@
|
||||||
"flags": "-tp {name}"
|
"flags": "-tp {name}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"cpupart": "0xd4f"
|
||||||
|
},
|
||||||
|
"neoverse_n2": {
|
||||||
|
"from": ["neoverse_n1", "armv9.0a"],
|
||||||
|
"vendor": "ARM",
|
||||||
|
"features": [
|
||||||
|
"fp",
|
||||||
|
"asimd",
|
||||||
|
"evtstrm",
|
||||||
|
"aes",
|
||||||
|
"pmull",
|
||||||
|
"sha1",
|
||||||
|
"sha2",
|
||||||
|
"crc32",
|
||||||
|
"atomics",
|
||||||
|
"fphp",
|
||||||
|
"asimdhp",
|
||||||
|
"cpuid",
|
||||||
|
"asimdrdm",
|
||||||
|
"jscvt",
|
||||||
|
"fcma",
|
||||||
|
"lrcpc",
|
||||||
|
"dcpop",
|
||||||
|
"sha3",
|
||||||
|
"asimddp",
|
||||||
|
"sha512",
|
||||||
|
"sve",
|
||||||
|
"asimdfhm",
|
||||||
|
"uscat",
|
||||||
|
"ilrcpc",
|
||||||
|
"flagm",
|
||||||
|
"ssbs",
|
||||||
|
"sb",
|
||||||
|
"dcpodp",
|
||||||
|
"sve2",
|
||||||
|
"flagm2",
|
||||||
|
"frint",
|
||||||
|
"svei8mm",
|
||||||
|
"svebf16",
|
||||||
|
"i8mm",
|
||||||
|
"bf16"
|
||||||
|
],
|
||||||
|
"compilers" : {
|
||||||
|
"gcc": [
|
||||||
|
{
|
||||||
|
"versions": "4.8:5.99",
|
||||||
|
"flags": "-march=armv8-a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "6:6.99",
|
||||||
|
"flags" : "-march=armv8.1-a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "7.0:7.99",
|
||||||
|
"flags" : "-march=armv8.2-a -mtune=cortex-a72"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "8.0:8.99",
|
||||||
|
"flags" : "-march=armv8.4-a+sve -mtune=cortex-a72"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "9.0:9.99",
|
||||||
|
"flags" : "-march=armv8.5-a+sve -mtune=cortex-a76"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "10.0:10.99",
|
||||||
|
"flags" : "-march=armv8.5-a+sve+sve2+i8mm+bf16 -mtune=cortex-a77"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "11.0:",
|
||||||
|
"flags" : "-mcpu=neoverse-n2"
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"clang" : [
|
||||||
|
{
|
||||||
|
"versions": "9.0:10.99",
|
||||||
|
"flags" : "-march=armv8.5-a+sve"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "11.0:13.99",
|
||||||
|
"flags" : "-march=armv8.5-a+sve+sve2+i8mm+bf16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "14.0:15.99",
|
||||||
|
"flags" : "-march=armv9-a+i8mm+bf16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": "16.0:",
|
||||||
|
"flags" : "-mcpu=neoverse-n2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"arm" : [
|
||||||
|
{
|
||||||
|
"versions": "23.04.0:",
|
||||||
|
"flags" : "-mcpu=neoverse-n2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"nvhpc" : [
|
||||||
|
{
|
||||||
|
"versions": "23.3:",
|
||||||
|
"name": "neoverse-n1",
|
||||||
|
"flags": "-tp {name}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"cpupart": "0xd49"
|
||||||
},
|
},
|
||||||
"m1": {
|
"m1": {
|
||||||
"from": ["armv8.4a"],
|
"from": ["armv8.4a"],
|
||||||
|
@ -3211,7 +3319,8 @@
|
||||||
"flags" : "-mcpu=apple-m1"
|
"flags" : "-mcpu=apple-m1"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"cpupart": "0x022"
|
||||||
},
|
},
|
||||||
"m2": {
|
"m2": {
|
||||||
"from": ["m1", "armv8.5a"],
|
"from": ["m1", "armv8.5a"],
|
||||||
|
@ -3289,7 +3398,8 @@
|
||||||
"flags" : "-mcpu=apple-m2"
|
"flags" : "-mcpu=apple-m2"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"cpupart": "0x032"
|
||||||
},
|
},
|
||||||
"arm": {
|
"arm": {
|
||||||
"from": [],
|
"from": [],
|
||||||
|
|
|
@ -52,6 +52,9 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"cpupart": {
|
||||||
|
"type": "string"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": [
|
"required": [
|
||||||
|
|
Loading…
Reference in a new issue