summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorChristoph Junghans <junghans@lanl.gov>2020-03-10 09:08:10 -0600
committerGitHub <noreply@github.com>2020-03-10 09:08:10 -0600
commit774407078728faee465addc48f825a7da330d40a (patch)
treef8ec3e7fe9bfbdd985572cd4c96f4229adaab1a5 /var
parent48f8f0ec58bd80a25b8e278fbcc1687ddd5585d9 (diff)
downloadspack-774407078728faee465addc48f825a7da330d40a.tar.gz
spack-774407078728faee465addc48f825a7da330d40a.tar.bz2
spack-774407078728faee465addc48f825a7da330d40a.tar.xz
spack-774407078728faee465addc48f825a7da330d40a.zip
gromacs: remove simd variants (#13636)
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/gromacs/package.py48
1 files changed, 34 insertions, 14 deletions
diff --git a/var/spack/repos/builtin/packages/gromacs/package.py b/var/spack/repos/builtin/packages/gromacs/package.py
index 72aca3e5f0..037b25721b 100644
--- a/var/spack/repos/builtin/packages/gromacs/package.py
+++ b/var/spack/repos/builtin/packages/gromacs/package.py
@@ -2,8 +2,7 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-
-from spack import *
+import llnl.util.cpu
class Gromacs(CMakePackage):
@@ -62,12 +61,6 @@ class Gromacs(CMakePackage):
description='The build type to build',
values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel',
'Reference', 'RelWithAssert', 'Profile'))
- variant('simd', default='auto',
- description='The SIMD instruction set to use',
- values=('auto', 'none', 'SSE2', 'SSE4.1', 'AVX_128_FMA', 'AVX_256',
- 'AVX2_128', 'AVX2_256', 'AVX_512', 'AVX_512_KNL',
- 'IBM_QPX', 'Sparc64_HPC_ACE', 'IBM_VMX', 'IBM_VSX',
- 'ARM_NEON', 'ARM_NEON_ASIMD'))
variant('rdtscp', default=True, description='Enable RDTSCP instruction usage')
variant('mdrun_only', default=False,
description='Enables the build of a cut-down version'
@@ -119,13 +112,40 @@ class Gromacs(CMakePackage):
else:
options.append('-DGMX_GPU:BOOL=OFF')
- simd_value = self.spec.variants['simd'].value
- if simd_value == 'auto':
- pass
- elif simd_value == 'none':
- options.append('-DGMX_SIMD:STRING=None')
+ # Activate SIMD based on properties of the target
+ target = self.spec.target
+ if target >= llnl.util.cpu.targets['bulldozer']:
+ # AMD Family 15h
+ options.append('-DGMX_SIMD=AVX_128_FMA')
+ elif target >= llnl.util.cpu.targets['zen']:
+ # AMD Family 17h
+ options.append('-DGMX_SIMD=AVX2_128')
+ elif target >= llnl.util.cpu.targets['power7']:
+ # IBM Power 7 and beyond
+ options.append('-DGMX_SIMD=IBM_VSX')
+ elif target.family == llnl.util.cpu.targets['aarch64']:
+ # ARMv8
+ options.append('-DGMX_SIMD=ARM_NEON_ASIMD')
+ elif target == llnl.util.cpu.targets['mic_knl']:
+ # Intel KNL
+ options.append('-DGMX_SIMD=AVX_512_KNL')
+ elif target.vendor == 'GenuineIntel':
+ # Other Intel architectures
+ simd_features = [
+ ('sse2', 'SSE2'),
+ ('sse4_1', 'SSE4.1'),
+ ('avx', 'AVX_256'),
+ ('axv128', 'AVX2_128'),
+ ('avx2', 'AVX2_256'),
+ ('avx512', 'AVX_512'),
+ ]
+ for feature, flag in reversed(simd_features):
+ if feature in target:
+ options.append('-DGMX_SIMD:STRING={0}'.format(flag))
+ break
else:
- options.append('-DGMX_SIMD:STRING=' + simd_value)
+ # Fall back to this for unknown microarchitectures
+ options.append('-DGMX_SIMD:STRING=None')
if '-rdtscp' in self.spec:
options.append('-DGMX_USE_RDTSCP:BOOL=OFF')