From fdb2d6f493ccc67c7b21cfdfffd8655e0cdb0540 Mon Sep 17 00:00:00 2001 From: Geoff Womeldorff Date: Thu, 24 May 2018 09:53:58 -0600 Subject: kokkos: update kokkos spackage to add current host/gpu architectures. (#8226) * kokkos: update kokkos spackage to add current host/gpu architectures. * kokkos: simplify host/gpu architecture selection and make intent of arg population logic more clear. * kokkos: mollify flake8. * Make strings and logic more pythonic. Add error for GPU arch without CUDA. * kokkos: simplify conflicts behaviour. make args population more pythonic. * kokkos: move gpu values to list for use in variant and conflicts checking. * kokkos: How fortunate the man with None. * kokkos: fix gpu_arch conflict loop error. add conflict to guard against +cuda and 2.5.00:develop versions, until kokkos issue #1296 is resolved. * kokkos: mollify flake8. * kokkos: add descriptive message to version conflict with +cuda. --- var/spack/repos/builtin/packages/kokkos/package.py | 50 +++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'var') diff --git a/var/spack/repos/builtin/packages/kokkos/package.py b/var/spack/repos/builtin/packages/kokkos/package.py index 7f61270327..51d90ffc06 100644 --- a/var/spack/repos/builtin/packages/kokkos/package.py +++ b/var/spack/repos/builtin/packages/kokkos/package.py @@ -46,7 +46,43 @@ class Kokkos(Package): variant('qthreads', default=False, description="enable Qthreads backend") variant('cuda', default=False, description="enable Cuda backend") - variant('openmp', default=True, description="enable OpenMP backend") + variant('openmp', default=False, description="enable OpenMP backend") + + gpu_values = ('Kepler30', 'Kepler32', 'Kepler35', 'Kepler37', + 'Maxwell50', 'Maxwell52', 'Maxwell53', + 'Pascal60', 'Pascal61') + + # Host architecture variant + variant( + 'host_arch', + default=None, + values=('AMDAVX', 'ARMv80', 'ARMv81', 'ARMv8-ThunderX', + 'Power7', 'Power8', 'Power9', + 'WSM', 'SNB', 'HSW', 'BDW', 'SKX', 'KNC', 'KNL'), + description='Set the host architecture to use' + ) + + # GPU architecture variant + variant( + 'gpu_arch', + default=None, + values=gpu_values, + description='Set the GPU architecture to use' + ) + + # Check that we haven't specified a gpu architecture + # without specifying CUDA + for p in gpu_values: + conflicts('gpu_arch={0}'.format(p), when='~cuda', + msg='Must specify CUDA backend to use a GPU architecture.') + + # conflicts on kokkos version and cuda enabled + # see kokkos issue #1296 + # https://github.com/kokkos/kokkos/issues/1296 + conflicts('+cuda', when='@2.5.00:develop', + msg='Kokkos build system has issue when CUDA enabled' + ' in version 2.5.00, and develop until ' + 'issue #1296 is resolved.') # Specify that v1.x is required as v2.x has API changes depends_on('hwloc@:1') @@ -62,12 +98,24 @@ class Kokkos(Package): '--with-hwloc=%s' % spec['hwloc'].prefix, '--with-serial' ] + arch_args = [] + # Backends if '+openmp' in spec: g_args.append('--with-openmp') if 'qthreads' in spec: g_args.append('--with-qthreads=%s' % spec['qthreads'].prefix) if 'cuda' in spec: g_args.append('--with-cuda=%s' % spec['cuda'].prefix) + # Host architectures + host_arch = spec.variants['host_arch'].value + # GPU architectures + gpu_arch = spec.variants['gpu_arch'].value + if host_arch: + arch_args.append(host_arch) + if gpu_arch: + arch_args.append(gpu_arch) + if arch_args: + g_args.append('--arch={0}'.format(','.join(arch_args))) generate(*g_args) make() -- cgit v1.2.3-70-g09d2