summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorKen Raffenetti <raffenet@users.noreply.github.com>2022-05-03 15:12:19 -0500
committerGitHub <noreply@github.com>2022-05-03 22:12:19 +0200
commit4c19410669d189c4a0290f638e7fa662b8518aa3 (patch)
treef71e55f90e3ed5b9c0e5fc6b139530a621ccfb7e /var
parenta5e92893d3b127a3d71f2566f57d8f4499e38719 (diff)
downloadspack-4c19410669d189c4a0290f638e7fa662b8518aa3.tar.gz
spack-4c19410669d189c4a0290f638e7fa662b8518aa3.tar.bz2
spack-4c19410669d189c4a0290f638e7fa662b8518aa3.tar.xz
spack-4c19410669d189c4a0290f638e7fa662b8518aa3.zip
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 <massimiliano.culpo@gmail.com>
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/mpich/package.py24
1 files changed, 23 insertions, 1 deletions
diff --git a/var/spack/repos/builtin/packages/mpich/package.py b/var/spack/repos/builtin/packages/mpich/package.py
index ec8cdd8f19..d416016ad5 100644
--- a/var/spack/repos/builtin/packages/mpich/package.py
+++ b/var/spack/repos/builtin/packages/mpich/package.py
@@ -101,6 +101,19 @@ with '-Wl,-commons,use_dylibs' and without
'communications. Set MPIR_CVAR_CH4_NUM_VCIS=<N> 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 @@ with '-Wl,-commons,use_dylibs' and without
'--{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 @@ with '-Wl,-commons,use_dylibs' and without
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')