From 774407078728faee465addc48f825a7da330d40a Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Tue, 10 Mar 2020 09:08:10 -0600 Subject: gromacs: remove simd variants (#13636) --- .../repos/builtin/packages/gromacs/package.py | 48 +++++++++++++++------- 1 file changed, 34 insertions(+), 14 deletions(-) (limited to 'var') 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') -- cgit v1.2.3-60-g2f50