Skip to content

Commit

Permalink
Merge pull request #91 from E4S-Project/wi4mpi-cray-mpich
Browse files Browse the repository at this point in the history
Wi4MPI support for Cray MPICH implementation
  • Loading branch information
spoutn1k authored Nov 4, 2022
2 parents aa593e3 + faa7c8f commit 63d27b4
Show file tree
Hide file tree
Showing 4 changed files with 195 additions and 99 deletions.
12 changes: 9 additions & 3 deletions e4s_cl/cf/detect_mpi.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,11 +234,17 @@ def install_dir(libraries: Iterable[Path]) -> Optional[Path]:
"""

def _stub(library: Path) -> Optional[Path]:
path_elements = library.parts
try:
lib_index = library.parts.index('lib')
lib_index = path_elements.index('lib')
except ValueError:
return None
return Path(*library.parts[:lib_index])
# If not 'lib' directory can be found in the library path, assume
# a '/x/y/z/lib-like-dir/libmpi.so' structure and return '/x/y/z'
if len(path_elements) > 2:
lib_index = len(path_elements) - 2
else:
return None
return Path(*path_elements[:lib_index])

# Get a set of all the returns of _stub, filtering out the null values
potential_installs = set(filter(None, map(_stub, libraries)))
Expand Down
61 changes: 39 additions & 22 deletions e4s_cl/cf/wi4mpi/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,33 +23,50 @@ class _MPIFamily:
env_name: str
path_key: str
default_path_key: str
mpi_c_soname: str
mpi_f_soname: str

def __str__(self):
return self.cli_name


WI4MPI_METADATA = {
_MPIFamily(
'Intel(R) MPI',
'intelmpi',
'INTEL',
'INTELMPI_ROOT',
'INTELMPI_DEFAULT_ROOT',
),
_MPIFamily(
'Open MPI',
'openmpi',
'OMPI',
'OPENMPI_ROOT',
'OPENMPI_DEFAULT_ROOT',
),
_MPIFamily(
'MPICH',
'mpich',
'MPICH',
'MPICH_ROOT',
'MPICH_DEFAULT_ROOT',
),
_MPIFamily(**dict(
vendor_name='Intel(R) MPI',
cli_name='intelmpi',
env_name='INTEL',
path_key='INTELMPI_ROOT',
default_path_key='INTELMPI_DEFAULT_ROOT',
mpi_c_soname='libmpi.so',
mpi_f_soname='libmpifort.so',
)),
_MPIFamily(**dict(
vendor_name='Open MPI',
cli_name='openmpi',
env_name='OMPI',
path_key='OPENMPI_ROOT',
default_path_key='OPENMPI_DEFAULT_ROOT',
mpi_c_soname='libmpi.so',
mpi_f_soname='libmpi_mpifh.so',
)),
_MPIFamily(**dict(
vendor_name='MPICH',
cli_name='mpich',
env_name='MPICH',
path_key='MPICH_ROOT',
default_path_key='MPICH_DEFAULT_ROOT',
mpi_c_soname='libmpi.so',
mpi_f_soname='libmpifort.so',
)),
_MPIFamily(**dict(
vendor_name='CRAY MPICH',
cli_name='mpich',
env_name='MPICH',
path_key='MPICH_ROOT',
default_path_key='MPICH_DEFAULT_ROOT',
mpi_c_soname='libmpi_cray.so',
mpi_f_soname='libmpifort_cray.so',
)),
}

SUPPORTED_TRANSLATIONS = {
Expand Down Expand Up @@ -176,7 +193,7 @@ def _get_lib(env_name: str) -> Optional[Path]:

return list(
filter(lambda x: x.resolve().exists(),
[wrapper_lib, source_lib, target_lib]))
filter(None, [wrapper_lib, source_lib, target_lib])))


def wi4mpi_libpath(install_dir: Path):
Expand Down
Loading

0 comments on commit 63d27b4

Please sign in to comment.