From 4c19410669d189c4a0290f638e7fa662b8518aa3 Mon Sep 17 00:00:00 2001 From: Ken Raffenetti Date: Tue, 3 May 2022 15:12:19 -0500 Subject: [PATCH] mpich: add datatype engine variant (#30257) Starting with MPICH 3.4, we offer different datatype engine options (dataloop or yaksa). The default is 'auto', which will choose based on the device configuration. Starting with MPICH 4.0, building against an external yaksa library is supported. Co-authored-by: Massimiliano Culpo --- .../repos/builtin/packages/mpich/package.py | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/mpich/package.py b/var/spack/repos/builtin/packages/mpich/package.py index ec8cdd8f19d..d416016ad57 100644 --- a/var/spack/repos/builtin/packages/mpich/package.py +++ b/var/spack/repos/builtin/packages/mpich/package.py @@ -101,6 +101,19 @@ class Mpich(AutotoolsPackage, CudaPackage): 'communications. Set MPIR_CVAR_CH4_NUM_VCIS= to ' 'enable multiple vcis at runtime.') + variant( + 'datatype-engine', + default='auto', + description='controls the datatype engine to use', + values=('dataloop', 'yaksa', 'auto'), + when='@3.4:', + multi=False + ) + depends_on('yaksa', when='@4.0: device=ch4 datatype-engine=auto') + depends_on('yaksa', when='@4.0: device=ch4 datatype-engine=yaksa') + depends_on('yaksa+cuda', when='+cuda ^yaksa') + conflicts('datatype-engine=yaksa', when='device=ch3') + # Todo: cuda can be a conditional variant, but it does not seem to work when # overriding the variant from CudaPackage. conflicts('+cuda', when='@:3.3') @@ -454,7 +467,9 @@ def configure_args(self): '--{0}-romio'.format('enable' if '+romio' in spec else 'disable'), '--{0}-ibverbs'.format('with' if '+verbs' in spec else 'without'), '--enable-wrapper-rpath={0}'.format('no' if '~wrapperrpath' in - spec else 'yes') + spec else 'yes'), + '--with-yaksa={0}'.format( + spec['yaksa'].prefix if '^yaksa' in spec else 'embedded'), ] if '~fortran' in spec: @@ -528,6 +543,13 @@ def configure_args(self): config_args.append('--enable-thread-cs=per-vci') config_args.append('--with-ch4-max-vcis=default') + if 'datatype-engine=yaksa' in spec: + config_args.append('--with-datatype-engine=yaksa') + elif 'datatype-engine=dataloop' in spec: + config_args.append('--with-datatype-engine=dataloop') + elif 'datatype-engine=auto' in spec: + config_args.append('--with-datatye-engine=auto') + return config_args @run_after('install')