Skip to content
Snippets Groups Projects
Commit cfcf2171 authored by Damian Alvarez's avatar Damian Alvarez
Browse files

Tweaks to the hooks and MNS to support BullMPI

By mistake in this commit, but necessary anyway: Added UD modules for psmpi
parent db505df2
No related branches found
No related tags found
No related merge requests found
...@@ -44,12 +44,12 @@ SUPPORTED_TOOLCHAIN_FAMILIES = ( ...@@ -44,12 +44,12 @@ SUPPORTED_TOOLCHAIN_FAMILIES = (
+ SUPPORTED_TOPLEVEL_TOOLCHAIN_FAMILIES + SUPPORTED_TOPLEVEL_TOOLCHAIN_FAMILIES
) )
VETOED_INSTALLATIONS = { VETOED_INSTALLATIONS = {
'juwelsbooster': ['impi', 'impi-settings'], 'juwelsbooster': ['impi', 'impi-settings', 'BullMPI', 'BullMPI-settings'],
'juwels': [''], 'juwels': ['BullMPI', 'BullMPI-settings'],
'jurecadc': [''], 'jurecadc': [''],
'jurecabooster': ['OpenMPI', 'OpenMPI-settings', 'CUDA', 'nvidia-driver', 'UCX', 'NVHPC'], 'jurecabooster': ['OpenMPI', 'OpenMPI-settings', 'CUDA', 'nvidia-driver', 'UCX', 'NVHPC', 'BullMPI', 'BullMPI-settings'],
'jusuf': ['impi', 'impi-settings'], 'jusuf': ['impi', 'impi-settings', 'BullMPI', 'BullMPI-settings'],
'hdfml': [''], 'hdfml': ['BullMPI', 'BullMPI-settings'],
} }
common_site_contact = 'Support <sc@fz-juelich.de>' common_site_contact = 'Support <sc@fz-juelich.de>'
...@@ -201,7 +201,7 @@ def parse_hook(ec, *args, **kwargs): ...@@ -201,7 +201,7 @@ def parse_hook(ec, *args, **kwargs):
# Update the dict # Update the dict
ec_dict = ec.asdict() ec_dict = ec.asdict()
# MPIs are a family (in the Lmod sense) and require to load mpi-settings # MPIs are a family (in the Lmod sense) and require to load mpi-settings
if ec.name in SUPPORTED_MPIS: if ec.name in SUPPORTED_MPIS and '/p/software' in install_path().lower():
key = "modluafooter" key = "modluafooter"
value = ''' value = '''
if not ( isloaded("mpi-settings") ) then if not ( isloaded("mpi-settings") ) then
...@@ -260,7 +260,7 @@ family("mpi") ...@@ -260,7 +260,7 @@ family("mpi")
# not sure of a fool-proof way to do this, let's just try a heuristic # not sure of a fool-proof way to do this, let's just try a heuristic
site_contacts = None site_contacts = None
# Non-user installation # Non-user installation
if '/p/software' in install_path().lower() or '/gpfs/software' in install_path().lower(): if '/p/software' in install_path().lower():
if 'swmanage' in os.getenv('USER'): if 'swmanage' in os.getenv('USER'):
site_contacts = common_site_contact site_contacts = common_site_contact
else: else:
......
...@@ -51,10 +51,11 @@ mpi_relevant_versions = { ...@@ -51,10 +51,11 @@ mpi_relevant_versions = {
'psmpi': 2, 'psmpi': 2,
'MVAPICH2': 2, 'MVAPICH2': 2,
'OpenMPI': 2, 'OpenMPI': 2,
'BullMPI': 2,
} }
# MPIs with settings modules # MPIs with settings modules
mpi_with_settings = ['psmpi', 'impi', 'MVAPICH2', 'OpenMPI'] mpi_with_settings = ['psmpi', 'impi', 'OpenMPI', 'BullMPI']
class FlexibleCustomHierarchicalMNS(HierarchicalMNS): class FlexibleCustomHierarchicalMNS(HierarchicalMNS):
"""Class implementing an example hierarchical module naming scheme.""" """Class implementing an example hierarchical module naming scheme."""
...@@ -255,6 +256,11 @@ class FlexibleCustomHierarchicalMNS(HierarchicalMNS): ...@@ -255,6 +256,11 @@ class FlexibleCustomHierarchicalMNS(HierarchicalMNS):
else: else:
tc_comp_name, tc_comp_ver = self._find_relevant_compiler_info(tc_comp_info) tc_comp_name, tc_comp_ver = self._find_relevant_compiler_info(tc_comp_info)
mpi_name, mpi_ver = self._find_relevant_mpi_info(ec) mpi_name, mpi_ver = self._find_relevant_mpi_info(ec)
# Hack the module path extension, so BullMPI actually reuses the stack from OpenMPI
# instead of building everything on top unnecessarily
if mpi_name in 'BullMPI':
paths.append(os.path.join(MPI, tc_comp_name, tc_comp_ver, 'OpenMPI', mpi_ver))
else:
paths.append(os.path.join(MPI, tc_comp_name, tc_comp_ver, mpi_name, mpi_ver)) paths.append(os.path.join(MPI, tc_comp_name, tc_comp_ver, mpi_name, mpi_ver))
if ec['name'] in mpi_with_settings: if ec['name'] in mpi_with_settings:
......
easyblock = 'SystemBundle'
name = 'psmpi-settings'
version = '5.4'
versionsuffix = 'CUDA-UD'
homepage = ''
description = 'This is a module to load the default ParaStationMPI configuration'
site_contacts = 'd.alvarez@fz-juelich.de'
toolchain = SYSTEM
source_urls = []
sources = []
modextravars = {
'PSP_CUDA': '1',
'PSP_SHM': '0',
'PSP_UCP': '1',
'PSP_HARD_ABORT': '1',
'UCX_TLS': 'ud_x,cuda_ipc,gdr_copy,self,sm,cuda_copy',
'UCX_MEMTYPE_CACHE': 'n',
}
moduleclass = 'system'
easyblock = 'SystemBundle'
name = 'psmpi-settings'
version = '5.4'
versionsuffix = 'CUDA-low-latency-UD'
homepage = ''
description = '''This is a module to load the default ParaStationMPI configuration
This module is otherwise equivalent to mpi-settings/CUDA, but enables UCX_MEMTYPE_CACHE. Please read the URL below to
understand if this is something you can use:
http://openucx.github.io/ucx/faq.html#7-what-are-the-current-limitations-of-using-gpu-memory
'''
modloadmsg = '''
This module is otherwise equivalent to mpi-settings/CUDA, but enables UCX_MEMTYPE_CACHE. Please read the URL below to
understand if this is something you can use:
http://openucx.github.io/ucx/faq.html#7-what-are-the-current-limitations-of-using-gpu-memory
'''
site_contacts = 'd.alvarez@fz-juelich.de'
toolchain = SYSTEM
source_urls = []
sources = []
modextravars = {
'PSP_CUDA': '1',
'PSP_SHM': '0',
'PSP_UCP': '1',
'PSP_HARD_ABORT': '1',
'UCX_TLS': 'ud_x,cuda_ipc,gdr_copy,self,sm,cuda_copy',
'UCX_MEMTYPE_CACHE': 'y',
}
moduleclass = 'system'
easyblock = 'SystemBundle'
name = 'psmpi-settings'
version = '5.4'
versionsuffix = 'UCX-UD'
homepage = ''
description = 'This is a module to load the ParaStationMPI configuration. It enables UCX with UD as transport'
site_contacts = 'd.alvarez@fz-juelich.de'
toolchain = SYSTEM
source_urls = []
sources = []
modextravars = {
'PSP_OPENIB': '0',
'PSP_UCP': '1',
'PSP_HARD_ABORT': '1',
'UCX_TLS': 'ud_x,self,sm',
}
moduleclass = 'system'
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment