kokkos: fail gracefully on missing microarch (#25910)
Fall back on known parent microarches (as determined by spack's built-in archspec knowledge). Clsoes spack/spack#25907 .
This commit is contained in:
parent
bafd84e191
commit
fca81c2ac8
@ -85,46 +85,22 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage):
|
|||||||
}
|
}
|
||||||
|
|
||||||
spack_micro_arch_map = {
|
spack_micro_arch_map = {
|
||||||
"graviton": "",
|
|
||||||
"graviton2": "",
|
|
||||||
"aarch64": "",
|
|
||||||
"arm": "",
|
|
||||||
"ppc": "",
|
|
||||||
"ppc64": "",
|
|
||||||
"ppc64le": "",
|
|
||||||
"ppcle": "",
|
|
||||||
"sparc": None,
|
|
||||||
"sparc64": None,
|
|
||||||
"x86": "",
|
|
||||||
"x86_64": "",
|
|
||||||
"thunderx2": "THUNDERX2",
|
"thunderx2": "THUNDERX2",
|
||||||
"k10": None,
|
|
||||||
"zen": "ZEN",
|
"zen": "ZEN",
|
||||||
"bulldozer": "",
|
|
||||||
"piledriver": "",
|
|
||||||
"zen2": "ZEN2",
|
"zen2": "ZEN2",
|
||||||
"steamroller": "KAVERI",
|
"steamroller": "KAVERI",
|
||||||
"excavator": "CARIZO",
|
"excavator": "CARIZO",
|
||||||
"a64fx": "",
|
|
||||||
"power7": "POWER7",
|
"power7": "POWER7",
|
||||||
"power8": "POWER8",
|
"power8": "POWER8",
|
||||||
"power9": "POWER9",
|
"power9": "POWER9",
|
||||||
"power8le": "POWER8",
|
"power8le": "POWER8",
|
||||||
"power9le": "POWER9",
|
"power9le": "POWER9",
|
||||||
"i686": None,
|
|
||||||
"pentium2": None,
|
|
||||||
"pentium3": None,
|
|
||||||
"pentium4": None,
|
|
||||||
"prescott": None,
|
|
||||||
"nocona": None,
|
|
||||||
"nehalem": None,
|
|
||||||
"sandybridge": "SNB",
|
"sandybridge": "SNB",
|
||||||
"haswell": "HSW",
|
"haswell": "HSW",
|
||||||
"mic_knl": "KNL",
|
"mic_knl": "KNL",
|
||||||
"cannonlake": "SKX",
|
"cannonlake": "SKX",
|
||||||
"cascadelake": "SKX",
|
"cascadelake": "SKX",
|
||||||
"westmere": "WSM",
|
"westmere": "WSM",
|
||||||
"core2": None,
|
|
||||||
"ivybridge": "SNB",
|
"ivybridge": "SNB",
|
||||||
"broadwell": "BDW",
|
"broadwell": "BDW",
|
||||||
# @AndrewGaspar: Kokkos does not have an arch for plain-skylake - only
|
# @AndrewGaspar: Kokkos does not have an arch for plain-skylake - only
|
||||||
@ -209,6 +185,23 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage):
|
|||||||
|
|
||||||
variant('shared', default=True, description='Build shared libraries')
|
variant('shared', default=True, description='Build shared libraries')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_microarch(cls, target):
|
||||||
|
"""Get the Kokkos microarch name for a Spack target (spec.target).
|
||||||
|
"""
|
||||||
|
smam = cls.spack_micro_arch_map
|
||||||
|
|
||||||
|
# Find closest ancestor that has a known microarch optimization
|
||||||
|
if target.name not in smam:
|
||||||
|
for target in target.ancestors:
|
||||||
|
if target.name in smam:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
# No known microarch optimizatinos
|
||||||
|
return None
|
||||||
|
|
||||||
|
return smam[target.name]
|
||||||
|
|
||||||
def append_args(self, cmake_prefix, cmake_options, spack_options):
|
def append_args(self, cmake_prefix, cmake_options, spack_options):
|
||||||
variant_to_cmake_option = {'rocm': 'hip'}
|
variant_to_cmake_option = {'rocm': 'hip'}
|
||||||
for variant_name in cmake_options:
|
for variant_name in cmake_options:
|
||||||
@ -259,7 +252,7 @@ def cmake_args(self):
|
|||||||
kokkos_arch_name = self.spack_cuda_arch_map[cuda_arch]
|
kokkos_arch_name = self.spack_cuda_arch_map[cuda_arch]
|
||||||
spack_microarches.append(kokkos_arch_name)
|
spack_microarches.append(kokkos_arch_name)
|
||||||
|
|
||||||
kokkos_microarch_name = self.spack_micro_arch_map[spec.target.name]
|
kokkos_microarch_name = self.get_microarch(spec.target)
|
||||||
if kokkos_microarch_name:
|
if kokkos_microarch_name:
|
||||||
spack_microarches.append(kokkos_microarch_name)
|
spack_microarches.append(kokkos_microarch_name)
|
||||||
|
|
||||||
|
@ -660,7 +660,7 @@ def define_enable(suffix, value=None):
|
|||||||
# ################# Kokkos ######################
|
# ################# Kokkos ######################
|
||||||
|
|
||||||
if '+kokkos' in spec:
|
if '+kokkos' in spec:
|
||||||
arch = Kokkos.spack_micro_arch_map.get(spec.target.name, None)
|
arch = Kokkos.get_microarch(spec.target)
|
||||||
if arch:
|
if arch:
|
||||||
options.append(define("Kokkos_ARCH_" + arch.upper(), True))
|
options.append(define("Kokkos_ARCH_" + arch.upper(), True))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user