forked from mirrors/nixpkgs
hdf5: add openmpi-4 compatibility patches
This commit is contained in:
parent
c6f039e59c
commit
99ca454f23
|
@ -0,0 +1,58 @@
|
||||||
|
From 38c202df4db8eddd5e6f6f7d6506ce97912a3111 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dana Robinson <derobins@hdfgroup.org>
|
||||||
|
Date: Mon, 26 Nov 2018 22:10:06 -0800
|
||||||
|
Subject: [PATCH] Updated H5S to use the MPI-2 function MPI_Type_get_exten()
|
||||||
|
where available. OpenMPI 4.0 removed the deprecated MPI-1 MPI_type_extent()
|
||||||
|
call by default, so this avoids needing a special OpenMPI build.
|
||||||
|
|
||||||
|
---
|
||||||
|
src/H5Smpio.c | 26 ++++++++++++++++++++++++--
|
||||||
|
1 file changed, 24 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/H5Smpio.c b/src/H5Smpio.c
|
||||||
|
index 2bd275a729..e71e2cb858 100644
|
||||||
|
--- a/src/H5Smpio.c
|
||||||
|
+++ b/src/H5Smpio.c
|
||||||
|
@@ -879,7 +879,18 @@ H5S_mpio_hyper_type(const H5S_t *space, size_t elmt_size,
|
||||||
|
HMPI_GOTO_ERROR(FAIL, "MPI_Type_contiguous failed", mpi_code)
|
||||||
|
}
|
||||||
|
|
||||||
|
- MPI_Type_extent (inner_type, &inner_extent);
|
||||||
|
+#if MPI_VERSION >= 2
|
||||||
|
+{
|
||||||
|
+ /* As of version 4.0, OpenMPI now turns off MPI-1 API calls by default,
|
||||||
|
+ * so we're using the MPI-2 version even though we don't need the lb
|
||||||
|
+ * value.
|
||||||
|
+ */
|
||||||
|
+ MPI_Aint unused_lb_arg;
|
||||||
|
+ MPI_Type_get_extent(inner_type, &unused_lb_arg, &inner_extent);
|
||||||
|
+}
|
||||||
|
+#else
|
||||||
|
+ MPI_Type_extent(inner_type, &inner_extent);
|
||||||
|
+#endif
|
||||||
|
stride_in_bytes = inner_extent * (MPI_Aint)d[i].strid;
|
||||||
|
|
||||||
|
/* If the element count is larger than what a 32 bit integer can hold,
|
||||||
|
@@ -1500,7 +1511,18 @@ static herr_t H5S_mpio_create_large_type (hsize_t num_elements,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- MPI_Type_extent (old_type, &old_extent);
|
||||||
|
+#if MPI_VERSION >= 2
|
||||||
|
+{
|
||||||
|
+ /* As of version 4.0, OpenMPI now turns off MPI-1 API calls by default,
|
||||||
|
+ * so we're using the MPI-2 version even though we don't need the lb
|
||||||
|
+ * value.
|
||||||
|
+ */
|
||||||
|
+ MPI_Aint unused_lb_arg;
|
||||||
|
+ MPI_Type_get_extent(old_type, &unused_lb_arg, &old_extent);
|
||||||
|
+}
|
||||||
|
+#else
|
||||||
|
+ MPI_Type_extent(old_type, &old_extent);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/* Set up the arguments for MPI_Type_struct constructor */
|
||||||
|
type[0] = outer_type;
|
||||||
|
--
|
||||||
|
2.18.1
|
||||||
|
|
115
pkgs/tools/misc/hdf5/0001-Yanked-all-MPI-1-calls.patch
Normal file
115
pkgs/tools/misc/hdf5/0001-Yanked-all-MPI-1-calls.patch
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
From 8cf3bfb14bd2a80f13d269a9e84cd99f86f19254 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dana Robinson <derobins@hdfgroup.org>
|
||||||
|
Date: Tue, 27 Nov 2018 10:31:54 -0800
|
||||||
|
Subject: [PATCH] Yanked all MPI-1 calls
|
||||||
|
|
||||||
|
---
|
||||||
|
src/H5.c | 2 +-
|
||||||
|
src/H5Smpio.c | 24 ++++++++----------------
|
||||||
|
testpar/t_cache.c | 20 ++++++++++----------
|
||||||
|
3 files changed, 19 insertions(+), 27 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/H5.c b/src/H5.c
|
||||||
|
index d1967e611b..bf4643ca59 100644
|
||||||
|
--- a/src/H5.c
|
||||||
|
+++ b/src/H5.c
|
||||||
|
@@ -138,7 +138,7 @@ H5_init_library(void)
|
||||||
|
if (mpi_initialized && !mpi_finalized) {
|
||||||
|
int key_val;
|
||||||
|
|
||||||
|
- if(MPI_SUCCESS != (mpi_code = MPI_Comm_create_keyval(MPI_NULL_COPY_FN,
|
||||||
|
+ if(MPI_SUCCESS != (mpi_code = MPI_Comm_create_keyval(MPI_COMM_NULL_COPY_FN,
|
||||||
|
(MPI_Comm_delete_attr_function *)H5_mpi_delete_cb,
|
||||||
|
&key_val, NULL)))
|
||||||
|
HMPI_GOTO_ERROR(FAIL, "MPI_Comm_create_keyval failed", mpi_code)
|
||||||
|
diff --git a/src/H5Smpio.c b/src/H5Smpio.c
|
||||||
|
index e71e2cb858..935d27972e 100644
|
||||||
|
--- a/src/H5Smpio.c
|
||||||
|
+++ b/src/H5Smpio.c
|
||||||
|
@@ -879,18 +879,14 @@ H5S_mpio_hyper_type(const H5S_t *space, size_t elmt_size,
|
||||||
|
HMPI_GOTO_ERROR(FAIL, "MPI_Type_contiguous failed", mpi_code)
|
||||||
|
}
|
||||||
|
|
||||||
|
-#if MPI_VERSION >= 2
|
||||||
|
-{
|
||||||
|
/* As of version 4.0, OpenMPI now turns off MPI-1 API calls by default,
|
||||||
|
* so we're using the MPI-2 version even though we don't need the lb
|
||||||
|
* value.
|
||||||
|
*/
|
||||||
|
- MPI_Aint unused_lb_arg;
|
||||||
|
- MPI_Type_get_extent(inner_type, &unused_lb_arg, &inner_extent);
|
||||||
|
-}
|
||||||
|
-#else
|
||||||
|
- MPI_Type_extent(inner_type, &inner_extent);
|
||||||
|
-#endif
|
||||||
|
+ {
|
||||||
|
+ MPI_Aint unused_lb_arg;
|
||||||
|
+ MPI_Type_get_extent(inner_type, &unused_lb_arg, &inner_extent);
|
||||||
|
+ }
|
||||||
|
stride_in_bytes = inner_extent * (MPI_Aint)d[i].strid;
|
||||||
|
|
||||||
|
/* If the element count is larger than what a 32 bit integer can hold,
|
||||||
|
@@ -1511,18 +1507,14 @@ static herr_t H5S_mpio_create_large_type (hsize_t num_elements,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-#if MPI_VERSION >= 2
|
||||||
|
-{
|
||||||
|
/* As of version 4.0, OpenMPI now turns off MPI-1 API calls by default,
|
||||||
|
* so we're using the MPI-2 version even though we don't need the lb
|
||||||
|
* value.
|
||||||
|
*/
|
||||||
|
- MPI_Aint unused_lb_arg;
|
||||||
|
- MPI_Type_get_extent(old_type, &unused_lb_arg, &old_extent);
|
||||||
|
-}
|
||||||
|
-#else
|
||||||
|
- MPI_Type_extent(old_type, &old_extent);
|
||||||
|
-#endif
|
||||||
|
+ {
|
||||||
|
+ MPI_Aint unused_lb_arg;
|
||||||
|
+ MPI_Type_get_extent(old_type, &unused_lb_arg, &old_extent);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* Set up the arguments for MPI_Type_struct constructor */
|
||||||
|
type[0] = outer_type;
|
||||||
|
diff --git a/testpar/t_cache.c b/testpar/t_cache.c
|
||||||
|
index 5e15ec274c..ca5ded9ecf 100644
|
||||||
|
--- a/testpar/t_cache.c
|
||||||
|
+++ b/testpar/t_cache.c
|
||||||
|
@@ -1217,15 +1217,15 @@ setup_derived_types(void)
|
||||||
|
struct mssg_t sample; /* used to compute displacements */
|
||||||
|
|
||||||
|
/* setup the displacements array */
|
||||||
|
- if ( ( MPI_SUCCESS != MPI_Address(&sample.req, &displs[0]) ) ||
|
||||||
|
- ( MPI_SUCCESS != MPI_Address(&sample.src, &displs[1]) ) ||
|
||||||
|
- ( MPI_SUCCESS != MPI_Address(&sample.dest, &displs[2]) ) ||
|
||||||
|
- ( MPI_SUCCESS != MPI_Address(&sample.mssg_num, &displs[3]) ) ||
|
||||||
|
- ( MPI_SUCCESS != MPI_Address(&sample.base_addr, &displs[4]) ) ||
|
||||||
|
- ( MPI_SUCCESS != MPI_Address(&sample.len, &displs[5]) ) ||
|
||||||
|
- ( MPI_SUCCESS != MPI_Address(&sample.ver, &displs[6]) ) ||
|
||||||
|
- ( MPI_SUCCESS != MPI_Address(&sample.count, &displs[7]) ) ||
|
||||||
|
- ( MPI_SUCCESS != MPI_Address(&sample.magic, &displs[8]) ) ) {
|
||||||
|
+ if ( ( MPI_SUCCESS != MPI_Get_address(&sample.req, &displs[0]) ) ||
|
||||||
|
+ ( MPI_SUCCESS != MPI_Get_address(&sample.src, &displs[1]) ) ||
|
||||||
|
+ ( MPI_SUCCESS != MPI_Get_address(&sample.dest, &displs[2]) ) ||
|
||||||
|
+ ( MPI_SUCCESS != MPI_Get_address(&sample.mssg_num, &displs[3]) ) ||
|
||||||
|
+ ( MPI_SUCCESS != MPI_Get_address(&sample.base_addr, &displs[4]) ) ||
|
||||||
|
+ ( MPI_SUCCESS != MPI_Get_address(&sample.len, &displs[5]) ) ||
|
||||||
|
+ ( MPI_SUCCESS != MPI_Get_address(&sample.ver, &displs[6]) ) ||
|
||||||
|
+ ( MPI_SUCCESS != MPI_Get_address(&sample.count, &displs[7]) ) ||
|
||||||
|
+ ( MPI_SUCCESS != MPI_Get_address(&sample.magic, &displs[8]) ) ) {
|
||||||
|
|
||||||
|
nerrors++;
|
||||||
|
success = FALSE;
|
||||||
|
@@ -1245,7 +1245,7 @@ setup_derived_types(void)
|
||||||
|
|
||||||
|
if ( success ) {
|
||||||
|
|
||||||
|
- result = MPI_Type_struct(9, block_len, displs, mpi_types, &mpi_mssg_t);
|
||||||
|
+ result = MPI_Type_create_struct(9, block_len, displs, mpi_types, &mpi_mssg_t);
|
||||||
|
|
||||||
|
if ( result != MPI_SUCCESS ) {
|
||||||
|
|
||||||
|
--
|
||||||
|
2.18.1
|
||||||
|
|
|
@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/${name}/src/${name}.tar.bz2";
|
url = "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/${name}/src/${name}.tar.bz2";
|
||||||
sha256 = "1pr85fa1sh2ky6ai2hs3f21lp252grl2cq3wbyi4rh7dm83gyrqj";
|
sha256 = "1pr85fa1sh2ky6ai2hs3f21lp252grl2cq3wbyi4rh7dm83gyrqj";
|
||||||
};
|
};
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
mpiSupport = (mpi != null);
|
mpiSupport = (mpi != null);
|
||||||
|
@ -45,7 +45,13 @@ stdenv.mkDerivation rec {
|
||||||
++ optionals (mpi != null) ["--enable-parallel" "CC=${mpi}/bin/mpicc"]
|
++ optionals (mpi != null) ["--enable-parallel" "CC=${mpi}/bin/mpicc"]
|
||||||
++ optional enableShared "--enable-shared";
|
++ optional enableShared "--enable-shared";
|
||||||
|
|
||||||
patches = [./bin-mv.patch];
|
patches = [
|
||||||
|
./bin-mv.patch
|
||||||
|
# upstream patches for openmpi-4 compatiblity
|
||||||
|
# To be removed with the upgrade to 1.10.5
|
||||||
|
./0001-Updated-H5S-to-use-the-MPI-2-function-MPI_Type_get_e.patch
|
||||||
|
./0001-Yanked-all-MPI-1-calls.patch
|
||||||
|
];
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
find "$out" -type f -exec remove-references-to -t ${stdenv.cc} '{}' +
|
find "$out" -type f -exec remove-references-to -t ${stdenv.cc} '{}' +
|
||||||
|
|
Loading…
Reference in a new issue