diff options
author | Harmen Stoppels <harmenstoppels@gmail.com> | 2020-12-02 15:58:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-02 15:58:58 +0100 |
commit | b0baf429889ca22eaf8e7028ecb0061918c03dbd (patch) | |
tree | 1180c9c903738d0650409ad3999aaa156df1b876 | |
parent | e575a38d967cd20c44fa4eb515d543f0a21127ec (diff) | |
download | spack-b0baf429889ca22eaf8e7028ecb0061918c03dbd.tar.gz spack-b0baf429889ca22eaf8e7028ecb0061918c03dbd.tar.bz2 spack-b0baf429889ca22eaf8e7028ecb0061918c03dbd.tar.xz spack-b0baf429889ca22eaf8e7028ecb0061918c03dbd.zip |
Fix hipcc once more (#20095)
-rw-r--r-- | lib/spack/spack/build_systems/rocm.py (renamed from lib/spack/spack/build_systems/hip.py) | 47 | ||||
-rw-r--r-- | lib/spack/spack/pkgkit.py | 2 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/camp/package.py | 15 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/chai/package.py | 24 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/hip/package.py | 46 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/raja/package.py | 16 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/rocblas/package.py | 8 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/umpire/package.py | 22 |
8 files changed, 90 insertions, 90 deletions
diff --git a/lib/spack/spack/build_systems/hip.py b/lib/spack/spack/build_systems/rocm.py index da44f1428d..0107c6376b 100644 --- a/lib/spack/spack/build_systems/hip.py +++ b/lib/spack/spack/build_systems/rocm.py @@ -3,7 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -# Troubleshooting advice for +hip builds: +# Troubleshooting advice for +rocm builds: # # 1. When building with clang, go your compilers.yaml, # add an entry for the amd version of clang, as below. @@ -73,9 +73,11 @@ from spack.package import PackageBase from spack.directives import depends_on, variant, conflicts +import spack.variant -class HipPackage(PackageBase): - """Auxiliary class which contains HIP variant, dependencies and conflicts + +class ROCmPackage(PackageBase): + """Auxiliary class which contains ROCm variant, dependencies and conflicts and is meant to unify and facilitate its usage. Closely mimics CudaPackage. Maintainers: dtaller @@ -86,24 +88,26 @@ class HipPackage(PackageBase): amdgpu_targets = ( 'gfx701', 'gfx801', 'gfx802', 'gfx803', 'gfx900', 'gfx906', 'gfx908', 'gfx1010', - 'gfx1011', 'gfx1012', 'none' + 'gfx1011', 'gfx1012' ) - variant('hip', default=False, description='Enable HIP support') + variant('rocm', default=False, description='Enable ROCm support') - # possible amd gpu targets for hip builds - variant('amdgpu_target', default='none', values=amdgpu_targets) + # possible amd gpu targets for rocm builds + variant('amdgpu_target', + description='AMD GPU architecture', + values=spack.variant.any_combination_of(*amdgpu_targets)) - depends_on('llvm-amdgpu', when='+hip') - depends_on('hsa-rocr-dev', when='+hip') - depends_on('hip', when='+hip') + depends_on('llvm-amdgpu', when='+rocm') + depends_on('hsa-rocr-dev', when='+rocm') + depends_on('hip', when='+rocm') - # need amd gpu type for hip builds - conflicts('amdgpu_target=none', when='+hip') + # need amd gpu type for rocm builds + conflicts('amdgpu_target=none', when='+rocm') - # Make sure non-'none' amdgpu_targets cannot be used without +hip - for value in amdgpu_targets[:-1]: - conflicts('~hip', when='amdgpu_target=' + value) + # Make sure amdgpu_targets cannot be used without +rocm + for value in amdgpu_targets: + conflicts('~rocm', when='amdgpu_target=' + value) # https://github.com/ROCm-Developer-Tools/HIP/blob/master/bin/hipcc # It seems that hip-clang does not (yet?) accept this flag, in which case @@ -111,17 +115,8 @@ class HipPackage(PackageBase): # hip package file. But I will leave this here for future development. @staticmethod def hip_flags(amdgpu_target): - return '--amdgpu-target={0}'.format(amdgpu_target) - - # https://llvm.org/docs/AMDGPUUsage.html - # Possible architectures (not including 'none' option) - @staticmethod - def amd_gputargets_list(): - return ( - 'gfx701', 'gfx801', 'gfx802', 'gfx803', - 'gfx900', 'gfx906', 'gfx908', 'gfx1010', - 'gfx1011', 'gfx1012' - ) + archs = ",".join(amdgpu_target) + return '--amdgpu-target={0}'.format(archs) # HIP version vs Architecture diff --git a/lib/spack/spack/pkgkit.py b/lib/spack/spack/pkgkit.py index da519f2e16..2673d2dbd5 100644 --- a/lib/spack/spack/pkgkit.py +++ b/lib/spack/spack/pkgkit.py @@ -20,7 +20,7 @@ from spack.build_systems.aspell_dict import AspellDictPackage from spack.build_systems.autotools import AutotoolsPackage from spack.build_systems.cmake import CMakePackage from spack.build_systems.cuda import CudaPackage -from spack.build_systems.hip import HipPackage +from spack.build_systems.rocm import ROCmPackage from spack.build_systems.qmake import QMakePackage from spack.build_systems.maven import MavenPackage from spack.build_systems.scons import SConsPackage diff --git a/var/spack/repos/builtin/packages/camp/package.py b/var/spack/repos/builtin/packages/camp/package.py index 0d0f26280c..882bfec528 100644 --- a/var/spack/repos/builtin/packages/camp/package.py +++ b/var/spack/repos/builtin/packages/camp/package.py @@ -6,7 +6,7 @@ from spack import * -class Camp(CMakePackage, CudaPackage, HipPackage): +class Camp(CMakePackage, CudaPackage, ROCmPackage): """ Compiler agnostic metaprogramming library providing concepts, type operations and tuples for C++ and cuda @@ -40,12 +40,17 @@ class Camp(CMakePackage, CudaPackage, HipPackage): else: options.append('-DENABLE_CUDA=OFF') - if '+hip' in spec: - arch = self.spec.variants['amdgpu_target'].value + if '+rocm' in spec: options.extend([ '-DENABLE_HIP=ON', - '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix), - '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch)]) + '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix) + ]) + archs = self.spec.variants['amdgpu_target'].value + if archs != 'none': + arch_str = ",".join(archs) + options.append( + '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch_str) + ) else: options.append('-DENABLE_HIP=OFF') diff --git a/var/spack/repos/builtin/packages/chai/package.py b/var/spack/repos/builtin/packages/chai/package.py index d4fa53071d..6fd33dea8b 100644 --- a/var/spack/repos/builtin/packages/chai/package.py +++ b/var/spack/repos/builtin/packages/chai/package.py @@ -6,7 +6,7 @@ from spack import * -class Chai(CMakePackage, CudaPackage, HipPackage): +class Chai(CMakePackage, CudaPackage, ROCmPackage): """ Copy-hiding array interface for data migration between memory spaces """ @@ -36,12 +36,11 @@ class Chai(CMakePackage, CudaPackage, HipPackage): depends_on('umpire+cuda', when="+cuda") depends_on('raja+cuda', when="+raja+cuda") - # variants +hip and amdgpu_targets are not automatically passed to + # variants +rocm and amdgpu_targets are not automatically passed to # dependencies, so do it manually. - amdgpu_targets = HipPackage.amd_gputargets_list() - depends_on('umpire+hip', when='+hip') - depends_on('raja+hip', when="+raja+hip") - for val in amdgpu_targets: + depends_on('umpire+rocm', when='+rocm') + depends_on('raja+rocm', when="+raja+rocm") + for val in ROCmPackage.amdgpu_targets: depends_on('umpire amdgpu_target=%s' % val, when='amdgpu_target=%s' % val) depends_on('raja amdgpu_target=%s' % val, when='+raja amdgpu_target=%s' % val) @@ -63,12 +62,17 @@ class Chai(CMakePackage, CudaPackage, HipPackage): else: options.append('-DENABLE_CUDA=OFF') - if '+hip' in spec: - arch = self.spec.variants['amdgpu_target'].value + if '+rocm' in spec: options.extend([ '-DENABLE_HIP=ON', - '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix), - '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch)]) + '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix) + ]) + archs = self.spec.variants['amdgpu_target'].value + if archs != 'none': + arch_str = ",".join(archs) + options.append( + '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch_str) + ) else: options.append('-DENABLE_HIP=OFF') diff --git a/var/spack/repos/builtin/packages/hip/package.py b/var/spack/repos/builtin/packages/hip/package.py index 2712832564..91d9fcb8af 100644 --- a/var/spack/repos/builtin/packages/hip/package.py +++ b/var/spack/repos/builtin/packages/hip/package.py @@ -49,30 +49,6 @@ class Hip(CMakePackage): # See https://github.com/ROCm-Developer-Tools/HIP/pull/2141 patch('0002-Fix-detection-of-HIP_CLANG_ROOT.patch', when='@3.5.0:') - def setup_run_environment(self, env): - # NOTE: DO NOT PUT LOGIC LIKE self.spec[name] in this function!!!!! - # It DOES NOT WORK FOR EXTERNAL PACKAGES!!!! See get_rocm_prefix_info - rocm_prefixes = self.get_rocm_prefix_info() - - env.set('ROCM_PATH', rocm_prefixes['rocm-path']) - env.set('HIP_COMPILER', 'clang') - env.set('HIP_PLATFORM', 'hcc') - env.set('HIP_CLANG_PATH', rocm_prefixes['llvm-amdgpu'].bin) - env.set('HSA_PATH', rocm_prefixes['hsa-rocr-dev']) - env.set('ROCMINFO_PATH', rocm_prefixes['rocminfo']) - env.set('DEVICE_LIB_PATH', rocm_prefixes['rocm-device-libs'].lib) - env.set('HIP_PATH', rocm_prefixes['rocm-path']) - env.set('HIPCC_COMPILE_FLAGS_APPEND', - '--rocm-path={0}'.format(rocm_prefixes['rocm-path'])) - - if 'amdgpu_target' in self.spec.variants: - arch = self.spec.variants['amdgpu_target'].value - if arch != 'none': - env.set('HCC_AMDGPU_TARGET', arch) - - def setup_dependent_run_environment(self, env, dependent_spec): - self.setup_run_environment(env) - def get_rocm_prefix_info(self): # External packages in Spack do not currently contain dependency # information. External installations of hip therefore must compute @@ -98,15 +74,18 @@ class Hip(CMakePackage): 'hsa-rocr-dev': fallback_prefix.hsa, 'rocminfo': fallback_prefix.bin, 'rocm-device-libs': fallback_prefix, + 'device_lib_path': fallback_prefix } else: mydict = dict((name, self.spec[name].prefix) for name in ('llvm-amdgpu', 'hsa-rocr-dev', 'rocminfo', 'rocm-device-libs')) - mydict['rocm-path'] = os.path.dirname(self.spec.prefix) + mydict['rocm-path'] = self.spec.prefix + device_lib_path = mydict['rocm-device-libs'].amdgcn.bitcode + mydict['device_lib_path'] = device_lib_path return mydict - def setup_dependent_build_environment(self, env, dependent_spec): + def set_variables(self, env): # Indirection for dependency paths because hip may be an external in # Spack. See block comment on get_rocm_prefix_info . @@ -120,15 +99,24 @@ class Hip(CMakePackage): env.set('HIP_CLANG_PATH', rocm_prefixes['llvm-amdgpu'].bin) env.set('HSA_PATH', rocm_prefixes['hsa-rocr-dev']) env.set('ROCMINFO_PATH', rocm_prefixes['rocminfo']) - env.set('DEVICE_LIB_PATH', rocm_prefixes['rocm-device-libs'].lib) + env.set('DEVICE_LIB_PATH', rocm_prefixes['device_lib_path']) env.set('HIP_PATH', rocm_prefixes['rocm-path']) env.set('HIPCC_COMPILE_FLAGS_APPEND', - '--rocm-path={0}'.format(rocm_prefixes['rocm-path'])) + '--rocm-path={0}'.format(rocm_prefixes['device_lib_path'])) + + def setup_run_environment(self, env): + self.set_variables(env) + + def setup_dependent_build_environment(self, env, dependent_spec): + self.set_variables(env) if 'amdgpu_target' in dependent_spec.variants: arch = dependent_spec.variants['amdgpu_target'].value if arch != 'none': - env.set('HCC_AMDGPU_TARGET', arch) + env.set('HCC_AMDGPU_TARGET', ','.join(arch)) + + def setup_dependent_run_environment(self, env, dependent_spec): + self.setup_dependent_build_environment(env, dependent_spec) def setup_dependent_package(self, module, dependent_spec): self.spec.hipcc = join_path(self.prefix.bin, 'hipcc') diff --git a/var/spack/repos/builtin/packages/raja/package.py b/var/spack/repos/builtin/packages/raja/package.py index 7c139640f7..c2cdf5a607 100644 --- a/var/spack/repos/builtin/packages/raja/package.py +++ b/var/spack/repos/builtin/packages/raja/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) -class Raja(CMakePackage, CudaPackage, HipPackage): +class Raja(CMakePackage, CudaPackage, ROCmPackage): """RAJA Parallel Framework.""" homepage = "http://software.llnl.gov/RAJA/" @@ -33,7 +33,7 @@ class Raja(CMakePackage, CudaPackage, HipPackage): variant('examples', default=True, description='Build examples.') variant('exercises', default=True, description='Build exercises.') - conflicts('+openmp', when='+hip') + conflicts('+openmp', when='+rocm') depends_on('cmake@3.8:', type='build') depends_on('cmake@3.9:', when='+cuda', type='build') @@ -56,12 +56,16 @@ class Raja(CMakePackage, CudaPackage, HipPackage): else: options.append('-DENABLE_CUDA=OFF') - if '+hip' in spec: - arch = self.spec.variants['amdgpu_target'].value + if '+rocm' in spec: options.extend([ '-DENABLE_HIP=ON', - '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix), - '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch)]) + '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix)]) + archs = self.spec.variants['amdgpu_target'].value + if archs != 'none': + arch_str = ",".join(archs) + options.append( + '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch_str) + ) else: options.append('-DENABLE_HIP=OFF') diff --git a/var/spack/repos/builtin/packages/rocblas/package.py b/var/spack/repos/builtin/packages/rocblas/package.py index 2c6127317a..66c63ce9ab 100644 --- a/var/spack/repos/builtin/packages/rocblas/package.py +++ b/var/spack/repos/builtin/packages/rocblas/package.py @@ -20,9 +20,9 @@ class Rocblas(CMakePackage): version('3.7.0', sha256='9425db5f8e8b6f7fb172d09e2a360025b63a4e54414607709efc5acb28819642') version('3.5.0', sha256='8560fabef7f13e8d67da997de2295399f6ec595edfd77e452978c140d5f936f0') - amdgpu_targets = ('all', 'gfx803', 'gfx900', 'gfx906', 'gfx908') + tensile_architecture = ('all', 'gfx803', 'gfx900', 'gfx906', 'gfx908') - variant('amdgpu_target', default='all', multi=True, values=amdgpu_targets) + variant('tensile_architecture', default='all', values=tensile_architecture, multi=False) depends_on('cmake@3:', type='build') @@ -73,7 +73,7 @@ class Rocblas(CMakePackage): env.set('CXX', self.spec['hip'].hipcc) def cmake_args(self): - archs = ",".join(self.spec.variants['amdgpu_target'].value) + arch = self.spec.variants['tensile_architecture'].value tensile = join_path(self.stage.source_path, 'Tensile') @@ -86,7 +86,7 @@ class Rocblas(CMakePackage): '-DBUILD_WITH_TENSILE=ON', '-DTensile_TEST_LOCAL_PATH={0}'.format(tensile), '-DTensile_COMPILER=hipcc', - '-DTensile_ARCHITECTURE={0}'.format(archs), + '-DTensile_ARCHITECTURE={0}'.format(arch), '-DTensile_LOGIC=asm_full', '-DTensile_CODE_OBJECT_VERSION=V3', '-DBUILD_WITH_TENSILE_HOST={0}'.format( diff --git a/var/spack/repos/builtin/packages/umpire/package.py b/var/spack/repos/builtin/packages/umpire/package.py index 14eed00747..8b035e59df 100644 --- a/var/spack/repos/builtin/packages/umpire/package.py +++ b/var/spack/repos/builtin/packages/umpire/package.py @@ -7,7 +7,7 @@ import llnl.util.lang as lang import llnl.util.tty as tty -class Umpire(CMakePackage, CudaPackage, HipPackage): +class Umpire(CMakePackage, CudaPackage, ROCmPackage): """An application-focused API for memory management on NUMA & GPU architectures""" @@ -62,11 +62,10 @@ class Umpire(CMakePackage, CudaPackage, HipPackage): depends_on('blt', type='build') - # variants +hip and amdgpu_targets are not automatically passed to + # variants +rocm and amdgpu_targets are not automatically passed to # dependencies, so do it manually. - depends_on('camp+hip', when='+hip') - amdgpu_targets = HipPackage.amd_gputargets_list() - for val in amdgpu_targets: + depends_on('camp+rocm', when='+rocm') + for val in ROCmPackage.amdgpu_targets: depends_on('camp amdgpu_target=%s' % val, when='amdgpu_target=%s' % val) depends_on('camp') @@ -97,12 +96,17 @@ class Umpire(CMakePackage, CudaPackage, HipPackage): else: options.append('-DENABLE_CUDA=Off') - if '+hip' in spec: - arch = self.spec.variants['amdgpu_target'].value + if '+rocm' in spec: options.extend([ '-DENABLE_HIP=ON', - '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix), - '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch)]) + '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix) + ]) + archs = self.spec.variants['amdgpu_target'].value + if archs != 'none': + arch_str = ",".join(archs) + options.append( + '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch_str) + ) else: options.append('-DENABLE_HIP=OFF') |