diff options
author | Jon Rood <jon.rood@nrel.gov> | 2022-01-18 04:24:32 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-18 06:24:32 -0500 |
commit | 7ae8a5d55bba6b72a82cbbeac9c03117092f843c (patch) | |
tree | 1bb456021e77c9f73483bb39f11106201588a149 | |
parent | 64913af04a78e5cb33516f66cca0e8efe919b95c (diff) | |
download | spack-7ae8a5d55bba6b72a82cbbeac9c03117092f843c.tar.gz spack-7ae8a5d55bba6b72a82cbbeac9c03117092f843c.tar.bz2 spack-7ae8a5d55bba6b72a82cbbeac9c03117092f843c.tar.xz spack-7ae8a5d55bba6b72a82cbbeac9c03117092f843c.zip |
Add ROCmPackage to trilinos (#28424)
* Add ROCmPackage to trilinos.
* Simplify Trilinos ROCm support. Add MI200 to Kokkos AMD GPU arch map.
-rw-r--r-- | var/spack/repos/builtin/packages/kokkos/package.py | 3 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/trilinos/package.py | 30 |
2 files changed, 31 insertions, 2 deletions
diff --git a/var/spack/repos/builtin/packages/kokkos/package.py b/var/spack/repos/builtin/packages/kokkos/package.py index 42f83a388a..16d7d6ecd9 100644 --- a/var/spack/repos/builtin/packages/kokkos/package.py +++ b/var/spack/repos/builtin/packages/kokkos/package.py @@ -140,7 +140,8 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage): amdgpu_arch_map = { 'gfx900': 'vega900', 'gfx906': 'vega906', - 'gfx908': 'vega908' + 'gfx908': 'vega908', + 'gfx90a': 'vega90A' } amd_support_conflict_msg = ( '{0} is not supported; ' diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py index efc1e406b3..fc515ae5b5 100644 --- a/var/spack/repos/builtin/packages/trilinos/package.py +++ b/var/spack/repos/builtin/packages/trilinos/package.py @@ -22,7 +22,7 @@ from spack.pkg.builtin.kokkos import Kokkos # https://github.com/trilinos/Trilinos/issues/175 -class Trilinos(CMakePackage, CudaPackage): +class Trilinos(CMakePackage, CudaPackage, ROCmPackage): """The Trilinos Project is an effort to develop algorithms and enabling technologies within an object-oriented software framework for the solution of large-scale, complex multi-physics engineering and scientific problems. @@ -192,6 +192,7 @@ class Trilinos(CMakePackage, CudaPackage): # Tpetra packages with when('~kokkos'): conflicts('+cuda') + conflicts('+rocm') conflicts('+tpetra') conflicts('+intrepid2') conflicts('+phalanx') @@ -411,6 +412,17 @@ class Trilinos(CMakePackage, CudaPackage): else: env.set('CXX', spec["kokkos-nvcc-wrapper"].kokkos_cxx) + if '+rocm' in spec: + if '+mpi' in spec: + env.set('OMPI_CXX', self.spec['hip'].hipcc) + env.set('MPICH_CXX', self.spec['hip'].hipcc) + env.set('MPICXX_CXX', self.spec['hip'].hipcc) + else: + env.set('CXX', self.spec['hip'].hipcc) + if '+stk' in spec: + # Using CXXFLAGS for hipcc which doesn't use flags in the spack wrappers + env.set('CXXFLAGS', '-DSTK_NO_BOOST_STACKTRACE') + def cmake_args(self): options = [] @@ -717,6 +729,22 @@ class Trilinos(CMakePackage, CudaPackage): for arch in spec.variants['cuda_arch'].value ) + if '+rocm' in spec: + options.extend([ + define_kok_enable('ROCM', False), + define_kok_enable('HIP', True) + ]) + if '+tpetra' in spec: + options.append(define('Tpetra_INST_HIP', True)) + amdgpu_arch_map = Kokkos.amdgpu_arch_map + for amd_target in spec.variants['amdgpu_target'].value: + try: + arch = amdgpu_arch_map[amd_target] + except KeyError: + pass + else: + options.append(define("Kokkos_ARCH_" + arch.upper(), True)) + # ################# System-specific ###################### # Fortran lib (assumes clang is built with gfortran!) |