diff --git a/Custom_EasyBlocks/mpcframework.py b/Custom_EasyBlocks/mpcframework.py new file mode 100644 index 0000000000000000000000000000000000000000..5808d43ac48c2da5337f3d1ad758694a2b800819 --- /dev/null +++ b/Custom_EasyBlocks/mpcframework.py @@ -0,0 +1,34 @@ +from easybuild.easyblocks.generic.binary import Binary +from easybuild.tools.filetools import write_file + +import os.path + + +class EB_MPCFramework(Binary): + """Support for building/installing the MPC Framework.""" + + def make_module_extra(self): + """Correctly prepend $PYTHONPATH and set environment variables for MPC Framework. Equivalent to mpcvars.sh.""" + + txt = super(EB_MPCFramework, self).make_module_extra() + + txt += self.module_generator.set_environment( + "MPC_INSTALL_DIR_PREFIX", self.installdir) + txt += self.module_generator.set_environment( + "MPC_VERSION", self.version) + + # Variables such as $PATH, $CPATH or $LD_LIBRARY_PATH are already set + # by default by EasyBuild. + txt += self.module_generator.prepend_paths( + "PYTHONPATH", ['lib/python/', 'lib64/python/']) + + txt += self.module_generator.set_environment( + "MPCFRAMEWORK_DIR", self.installdir + 'share/mpcframework/cmake/') + + return txt + + def post_install_step(self): + """Override network rail configuration by adding an MPC configuration file""" + + write_file(os.path.join(self.installdir, "etc", "mpcframework", "rail.conf"), + "LOWCOMM_NETWORKING_RAILS_IBMPI_DEVICE=mlx5_0") diff --git a/Golden_Repo/m/MPCFramework/MPCFramework-4.2.0-GCC-11.3.0.eb b/Golden_Repo/m/MPCFramework/MPCFramework-4.2.0-GCC-11.3.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..b3f3ff8c90d59568c89f94c7a04579924fe0e9ae --- /dev/null +++ b/Golden_Repo/m/MPCFramework/MPCFramework-4.2.0-GCC-11.3.0.eb @@ -0,0 +1,58 @@ +name = 'MPCFramework' +version = '4.2.0' + +homepage = 'https://mpc.hpcframework.com' +description = """An Implementation of MPI and OpenMP relying on user-level threads""" + +toolchain = {'name': 'GCC', 'version': '11.3.0'} + +source_urls = [ + 'https://github.com/cea-hpc/mpc/archive/refs/tags/' +] + +sources = ['MPC_%(version)s.zip'] +checksums = [ + # MPC_4.2.0.zip + 'd2610173cf0bf8f64985bc45602c133ca0beaff78c8bea7fe35fda771ceae5ca', + # nvdimm.patch + '36e058b5aa7a2b4d850e0ffba72c113acede2906b143a61dc63a5da68a4c7e85', + # pmix.patch + '85bd42edd90d6e9bb83e0dd60accc69e260eecd600b15230e6693be39e88598a', + # rma-get-attr.patch + 'f5f308c1438fd5c33ead66ac83592749227a8cabd99ff717bcdde85ce89ecf8f', +] + +patches = [ + 'nvdimm.patch', + 'pmix.patch', + 'rma-get-attr.patch', +] + +builddependencies = [ + ('CMake', '3.23.1'), + ('bzip2', '1.0.8', '', ('GCCcore', '11.3.0')), + ('cURL', '7.83.0'), + ('help2man', '1.49.2'), + ('OpenSSL', '1.1', '', SYSTEM), +] + +installopts = '--prefix=%(installdir)s ' +installopts += '-j%(parallel)s ' +installopts += '--enable-color ' +installopts += '--disable-spack ' +installopts += '--disable-spack-build ' +installopts += '--mpc-option="--without-portals" ' + +# To enable SLURM integration (site-specific) +installopts += '--with-pmix ' + +sanity_check_commands = [ + "mpcrun --help", + "mpc_print_config" +] + +moduleclass = 'devel' + +# Options passed to the Binary EasyBlock (superclass of the MPCFramework EasyBlock) +extract_sources = True +install_cmd = 'mkdir BUILD && cd BUILD && ../installmpc' diff --git a/Golden_Repo/m/MPCFramework/nvdimm.patch b/Golden_Repo/m/MPCFramework/nvdimm.patch new file mode 100644 index 0000000000000000000000000000000000000000..61cadd0d9b4dcc0f27e68099af301bbcda495e92 --- /dev/null +++ b/Golden_Repo/m/MPCFramework/nvdimm.patch @@ -0,0 +1,26 @@ +[PATCH] LAUNCH: Fix mpcrun --help crash with NVDIMM +author: Remi Dehenne + +mpcrun --help no longer crashes when mpc_print_config displays +`<Topology> NVDIMM Found ! (OS Device #xx)` messages. +Those messages are now printed on stderr with +mpc_common_debug_log, rather than with fprintf on stdout. +--- + src/MPC_Topology/src/topology.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/MPC_Topology/src/topology.c b/src/MPC_Topology/src/topology.c +index e62cbcb01..9172c6de2 100644 +--- a/src/MPC_Topology/src/topology.c ++++ b/src/MPC_Topology/src/topology.c +@@ -1376,7 +1376,7 @@ void _mpc_topology_nvdimm_detection(hwloc_topology_t topology) + { + if(strcmp(current->subtype, "NVDIMM") == 0) + { +- fprintf(stdout, "<Topology> %s Found ! (OS Device #%d)\n", current->subtype, current->logical_index); ++ mpc_common_debug_log("<Topology> %s Found ! (OS Device #%d)\n", current->subtype, current->logical_index); + ++__mpc_module_avail_nvdimm; + } + } +-- + diff --git a/Golden_Repo/m/MPCFramework/pmix.patch b/Golden_Repo/m/MPCFramework/pmix.patch new file mode 100644 index 0000000000000000000000000000000000000000..82ccc355e0ddbeef9cdf3c8eb9c3d825125629ff --- /dev/null +++ b/Golden_Repo/m/MPCFramework/pmix.patch @@ -0,0 +1,25 @@ +From fc4b775594984ecac16ec56074a0636961ecb3f2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?R=C3=A9mi=20Dehenne?= <remi.dehenne@cea.fr> +Date: Tue, 25 Jul 2023 13:02:19 +0200 +Subject: [PATCH] LAUNCH: Fix PMIx compilation error + +--- + src/MPC_Launch/src/pmi.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/MPC_Launch/src/pmi.c b/src/MPC_Launch/src/pmi.c +index 3970bd598..08916cd46 100644 +--- a/src/MPC_Launch/src/pmi.c ++++ b/src/MPC_Launch/src/pmi.c +@@ -1004,7 +1004,7 @@ int mpc_launch_pmi_get( char *value, size_t size, char *key, int remote) + assume(val->type == PMIX_STRING); + strcpy(value, val->data.string); + PMIX_VALUE_RELEASE(val); +- PMIX_PROC_DESTRUCT(proc); ++ PMIX_PROC_DESTRUCT(&proc); + PMI_RETURN( rc ); + #else + UNUSED(remote); +-- +2.34.1 + diff --git a/Golden_Repo/m/MPCFramework/rma-get-attr.patch b/Golden_Repo/m/MPCFramework/rma-get-attr.patch new file mode 100644 index 0000000000000000000000000000000000000000..dc20f77ac82b36500b894d613dd2459cc85cf992 --- /dev/null +++ b/Golden_Repo/m/MPCFramework/rma-get-attr.patch @@ -0,0 +1,58 @@ +From 831247ca5ab5589e42be0864bc3d1965b7cec914 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?R=C3=A9mi=20Dehenne?= <remi.dehenne@cea.fr> +Date: Fri, 27 Oct 2023 18:44:31 +0200 +Subject: [PATCH] RMA: Fix invalid arg type in MPI_Win_get_attr + +The attribute_val argument of MPI_Win_get_attr was improperly set regarding +to the MPI Standard. +Prior to casting, the attribute_val argument must be an int** or void**. +MPC assumed attribute_val to be an int* or void*, thus leading to +unexpected behaviors in user applications. +--- + src/MPC_MPI/src/mpi_rma_win.c | 11 ++++------- + 1 file changed, 4 insertions(+), 7 deletions(-) + +diff --git a/src/MPC_MPI/src/mpi_rma_win.c b/src/MPC_MPI/src/mpi_rma_win.c +index de22d11db..c02ba4d9c 100644 +--- a/src/MPC_MPI/src/mpi_rma_win.c ++++ b/src/MPC_MPI/src/mpi_rma_win.c +@@ -1163,7 +1163,6 @@ int mpc_MPI_Win_get_attr(MPI_Win win, int keyval, void *attr_val, int *flag) + } + + struct mpc_lowcomm_rdma_window *low_win = sctk_win_translate(win); +- uintptr_t val; + + /* First handle special values */ + switch(keyval) +@@ -1175,24 +1174,22 @@ int mpc_MPI_Win_get_attr(MPI_Win win, int keyval, void *attr_val, int *flag) + + case MPI_WIN_SIZE: + *flag = 1; +- *( (void **)attr_val) = (void *)low_win->size; ++ *( (void **)attr_val) = (void *)&low_win->size; + return MPI_SUCCESS; + + case MPI_WIN_DISP_UNIT: + *flag = 1; +- *( (void **)attr_val) = (void *)low_win->disp_unit; ++ *( (void **)attr_val) = (void *)&low_win->disp_unit; + return MPI_SUCCESS; + + case MPI_WIN_CREATE_FLAVOR: + *flag = 1; +- val = desc->flavor; +- *( (void **)attr_val) = (void *)val; ++ *( (void **)attr_val) = (void *)&desc->flavor; + return MPI_SUCCESS; + + case MPI_WIN_MODEL: + *flag = 1; +- val = desc->model; +- *( (void **)attr_val) = (void *)val; ++ *( (void **)attr_val) = (void *)&desc->model; + return MPI_SUCCESS; + } + +-- +2.34.1 +