diff --git a/CMakeLists.txt b/CMakeLists.txt index 3aca31ff031..c466487b70f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -671,6 +671,12 @@ if (HDF5_ENABLE_PARALLEL) find_package(MPI REQUIRED) if (MPI_C_FOUND) set (H5_HAVE_PARALLEL 1) + + # Require MPI standard 3.0 and greater + if (MPI_VERSION LESS 3) + message (FATAL_ERROR "HDF5 requires MPI standard 3.0 or greater") + endif () + # MPI checks, only do these if MPI_C_FOUND is true, otherwise they always fail # and once set, they are cached as false and not regenerated set (CMAKE_REQUIRED_LIBRARIES "${MPI_C_LIBRARIES}") diff --git a/configure.ac b/configure.ac index 37252d9a76a..9e823ceb3f7 100644 --- a/configure.ac +++ b/configure.ac @@ -2654,6 +2654,20 @@ if test "X${ALLOW_UNSUPPORTED}" != "Xyes"; then fi fi +# Requires MPI standard 3.0 and greater +if test "X${enable_parallel}" = "Xyes"; then + AC_MSG_CHECKING([whether MPI meets the minimum 3.0 standard]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #if MPI_VERSION < 3 + #error, found MPI_VERSION < 3 + #endif]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([HDF5 requires MPI standard 3.0 or greater])] + ) +fi + AC_MSG_CHECKING([for parallel support files]) case "X-$enable_parallel" in X-|X-no|X-none) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 9e43c694af9..cba7948c3fa 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -332,6 +332,12 @@ Bug Fixes since HDF5-1.14.0 release =================================== Library ------- + + - Dropped support for MPI-2 + + The MPI-2 supporting artifacts have been removed due to the cessation + of MPI-2 maintenance and testing since version HDF5 1.12. + - Fixed a bug with the way the Subfiling VFD assigns I/O concentrators During a file open operation, the Subfiling VFD determines the topology diff --git a/src/H5Dmpio.c b/src/H5Dmpio.c index 3bab6be8c15..66677464a4d 100644 --- a/src/H5Dmpio.c +++ b/src/H5Dmpio.c @@ -3645,7 +3645,6 @@ H5D__mpio_share_chunk_modification_data(H5D_filtered_collective_io_info_t *chunk int H5_ATTR_NDEBUG_UNUSED mpi_size, unsigned char ***chunk_msg_bufs, int *chunk_msg_bufs_len) { -#if H5_CHECK_MPI_VERSION(3, 0) H5D_filtered_collective_chunk_info_t *chunk_table = NULL; H5S_sel_iter_t *mem_iter = NULL; unsigned char **msg_send_bufs = NULL; @@ -3867,20 +3866,12 @@ H5D__mpio_share_chunk_modification_data(H5D_filtered_collective_io_info_t *chunk * post a non-blocking receive to receive it */ if (msg_flag) { -#if H5_CHECK_MPI_VERSION(3, 0) MPI_Count msg_size = 0; if (MPI_SUCCESS != (mpi_code = MPI_Get_elements_x(&status, MPI_BYTE, &msg_size))) HMPI_GOTO_ERROR(FAIL, "MPI_Get_elements_x failed", mpi_code) H5_CHECK_OVERFLOW(msg_size, MPI_Count, int); -#else - int msg_size = 0; - - if (MPI_SUCCESS != (mpi_code = MPI_Get_elements(&status, MPI_BYTE, &msg_size))) - HMPI_GOTO_ERROR(FAIL, "MPI_Get_elements failed", mpi_code) -#endif - if (msg_size <= 0) HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "invalid chunk modification message size"); @@ -4033,13 +4024,6 @@ H5D__mpio_share_chunk_modification_data(H5D_filtered_collective_io_info_t *chunk #endif FUNC_LEAVE_NOAPI(ret_value) -#else - FUNC_ENTER_PACKAGE - HERROR( - H5E_DATASET, H5E_WRITEERROR, - "unable to send chunk modification data between MPI ranks - MPI version < 3 (MPI_Ibarrier missing)") - FUNC_LEAVE_NOAPI(FAIL) -#endif } /* end H5D__mpio_share_chunk_modification_data() */ /*------------------------------------------------------------------------- diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c index dfcb30c3004..5e2668b311b 100644 --- a/src/H5FDmpio.c +++ b/src/H5FDmpio.c @@ -11,7 +11,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* - * Purpose: This is the MPI-2 I/O driver. + * Purpose: This is the MPI I/O driver. */ #include "H5FDdrvr_module.h" /* This source code file is part of the H5FD driver module */ @@ -363,12 +363,12 @@ H5FD__mpio_term(void) * only in the parallel HDF5 library and is not collective. * * comm is the MPI communicator to be used for file open as - * defined in MPI_FILE_OPEN of MPI-2. This function makes a + * defined in MPI_FILE_OPEN of MPI. This function makes a * duplicate of comm. Any modification to comm after this function * call returns has no effect on the access property list. * * info is the MPI Info object to be used for file open as - * defined in MPI_FILE_OPEN of MPI-2. This function makes a + * defined in MPI_FILE_OPEN of MPI. This function makes a * duplicate of info. Any modification to info after this * function call returns has no effect on the access property * list. @@ -1222,20 +1222,13 @@ H5FD__mpio_read(H5FD_t *_file, H5FD_mem_t H5_ATTR_UNUSED type, hid_t H5_ATTR_UNU MPI_Status mpi_stat; /* Status from I/O operation */ MPI_Datatype buf_type = MPI_BYTE; /* MPI description of the selection in memory */ int size_i; /* Integer copy of 'size' to read */ -#if H5_CHECK_MPI_VERSION(3, 0) - MPI_Count bytes_read = 0; /* Number of bytes read in */ - MPI_Count type_size; /* MPI datatype used for I/O's size */ - MPI_Count io_size; /* Actual number of bytes requested */ - MPI_Count n; -#else - int bytes_read = 0; /* Number of bytes read in */ - int type_size; /* MPI datatype used for I/O's size */ - int io_size; /* Actual number of bytes requested */ - int n; -#endif - bool use_view_this_time = false; - bool derived_type = false; - bool rank0_bcast = false; /* If read-with-rank0-and-bcast flag was used */ + MPI_Count bytes_read = 0; /* Number of bytes read in */ + MPI_Count type_size; /* MPI datatype used for I/O's size */ + MPI_Count io_size; /* Actual number of bytes requested */ + MPI_Count n; + bool use_view_this_time = false; + bool derived_type = false; + bool rank0_bcast = false; /* If read-with-rank0-and-bcast flag was used */ #ifdef H5FDmpio_DEBUG bool H5FD_mpio_debug_t_flag = (H5FD_mpio_debug_flags_s[(int)'t'] && H5FD_MPIO_TRACE_THIS_RANK(file)); bool H5FD_mpio_debug_r_flag = (H5FD_mpio_debug_flags_s[(int)'r'] && H5FD_MPIO_TRACE_THIS_RANK(file)); @@ -1393,11 +1386,7 @@ H5FD__mpio_read(H5FD_t *_file, H5FD_mem_t H5_ATTR_UNUSED type, hid_t H5_ATTR_UNU /* Only retrieve bytes read if this rank _actually_ participated in I/O */ if (!rank0_bcast || (rank0_bcast && file->mpi_rank == 0)) { /* How many bytes were actually read? */ -#if H5_CHECK_MPI_VERSION(3, 0) if (MPI_SUCCESS != (mpi_code = MPI_Get_elements_x(&mpi_stat, buf_type, &bytes_read))) { -#else - if (MPI_SUCCESS != (mpi_code = MPI_Get_elements(&mpi_stat, MPI_BYTE, &bytes_read))) { -#endif if (rank0_bcast && file->mpi_rank == 0) { /* If MPI_Get_elements(_x) fails for a rank 0 bcast strategy, * push an error, but continue to participate in the following @@ -1418,19 +1407,11 @@ H5FD__mpio_read(H5FD_t *_file, H5FD_mem_t H5_ATTR_UNUSED type, hid_t H5_ATTR_UNU * of the data. (QAK - 2019/1/2) */ if (rank0_bcast) -#if H5_CHECK_MPI_VERSION(3, 0) if (MPI_SUCCESS != MPI_Bcast(&bytes_read, 1, MPI_COUNT, 0, file->comm)) -#else - if (MPI_SUCCESS != MPI_Bcast(&bytes_read, 1, MPI_INT, 0, file->comm)) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Bcast failed", 0) - /* Get the type's size */ -#if H5_CHECK_MPI_VERSION(3, 0) + /* Get the type's size */ if (MPI_SUCCESS != (mpi_code = MPI_Type_size_x(buf_type, &type_size))) -#else - if (MPI_SUCCESS != (mpi_code = MPI_Type_size(buf_type, &type_size))) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Type_size failed", mpi_code) /* Compute the actual number of bytes requested */ @@ -1486,19 +1467,13 @@ static herr_t H5FD__mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, haddr_t addr, size_t size, const void *buf) { - H5FD_mpio_t *file = (H5FD_mpio_t *)_file; - MPI_Offset mpi_off; - MPI_Status mpi_stat; /* Status from I/O operation */ - MPI_Datatype buf_type = MPI_BYTE; /* MPI description of the selection in memory */ -#if H5_CHECK_MPI_VERSION(3, 0) - MPI_Count bytes_written; - MPI_Count type_size; /* MPI datatype used for I/O's size */ - MPI_Count io_size; /* Actual number of bytes requested */ -#else - int bytes_written; - int type_size; /* MPI datatype used for I/O's size */ - int io_size; /* Actual number of bytes requested */ -#endif + H5FD_mpio_t *file = (H5FD_mpio_t *)_file; + MPI_Offset mpi_off; + MPI_Status mpi_stat; /* Status from I/O operation */ + MPI_Datatype buf_type = MPI_BYTE; /* MPI description of the selection in memory */ + MPI_Count bytes_written; + MPI_Count type_size; /* MPI datatype used for I/O's size */ + MPI_Count io_size; /* Actual number of bytes requested */ int size_i; bool use_view_this_time = false; bool derived_type = false; @@ -1642,19 +1617,11 @@ H5FD__mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, h } /* end else */ /* How many bytes were actually written? */ -#if H5_CHECK_MPI_VERSION(3, 0) if (MPI_SUCCESS != (mpi_code = MPI_Get_elements_x(&mpi_stat, buf_type, &bytes_written))) -#else - if (MPI_SUCCESS != (mpi_code = MPI_Get_elements(&mpi_stat, MPI_BYTE, &bytes_written))) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Get_elements failed", mpi_code) - /* Get the type's size */ -#if H5_CHECK_MPI_VERSION(3, 0) + /* Get the type's size */ if (MPI_SUCCESS != (mpi_code = MPI_Type_size_x(buf_type, &type_size))) -#else - if (MPI_SUCCESS != (mpi_code = MPI_Type_size(buf_type, &type_size))) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Type_size failed", mpi_code) /* Compute the actual number of bytes requested */ @@ -1858,7 +1825,7 @@ H5FD__mpio_vector_build_types(uint32_t count, H5FD_mem_t types[], haddr_t addrs[ HMPI_GOTO_ERROR(FAIL, "MPI_Get_address for s_bufs[] - mpi_bufs_base failed", mpi_code) /*... and then subtract mpi_bufs_base_Aint from it. */ -#if ((MPI_VERSION > 3) || ((MPI_VERSION == 3) && (MPI_SUBVERSION >= 1))) +#if H5_CHECK_MPI_VERSION(3, 1) mpi_bufs[i] = MPI_Aint_diff(mpi_bufs[i], mpi_bufs_base_Aint); #else mpi_bufs[i] = mpi_bufs[i] - mpi_bufs_base_Aint; @@ -2085,18 +2052,11 @@ H5FD__mpio_read_vector(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, uint32_t cou H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode */ H5FD_mpio_collective_opt_t coll_opt_mode; /* whether we are doing collective or independent I/O */ int size_i; -#if MPI_VERSION >= 3 - MPI_Count bytes_read = 0; /* Number of bytes read in */ - MPI_Count type_size; /* MPI datatype used for I/O's size */ - MPI_Count io_size; /* Actual number of bytes requested */ - MPI_Count n; -#else - int bytes_read = 0; /* Number of bytes read in */ - int type_size; /* MPI datatype used for I/O's size */ - int io_size; /* Actual number of bytes requested */ - int n; -#endif - bool rank0_bcast = false; /* If read-with-rank0-and-bcast flag was used */ + MPI_Count bytes_read = 0; /* Number of bytes read in */ + MPI_Count type_size; /* MPI datatype used for I/O's size */ + MPI_Count io_size; /* Actual number of bytes requested */ + MPI_Count n; + bool rank0_bcast = false; /* If read-with-rank0-and-bcast flag was used */ #ifdef H5FDmpio_DEBUG bool H5FD_mpio_debug_t_flag = (H5FD_mpio_debug_flags_s[(int)'t'] && H5FD_MPIO_TRACE_THIS_RANK(file)); bool H5FD_mpio_debug_r_flag = (H5FD_mpio_debug_flags_s[(int)'r'] && H5FD_MPIO_TRACE_THIS_RANK(file)); @@ -2226,11 +2186,7 @@ H5FD__mpio_read_vector(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, uint32_t cou /* Only retrieve bytes read if this rank _actually_ participated in I/O */ if (!rank0_bcast || (rank0_bcast && file->mpi_rank == 0)) { /* How many bytes were actually read? */ -#if MPI_VERSION >= 3 if (MPI_SUCCESS != (mpi_code = MPI_Get_elements_x(&mpi_stat, buf_type, &bytes_read))) -#else - if (MPI_SUCCESS != (mpi_code = MPI_Get_elements(&mpi_stat, MPI_BYTE, &bytes_read))) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Get_elements failed", mpi_code) } /* end if */ @@ -2243,19 +2199,11 @@ H5FD__mpio_read_vector(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, uint32_t cou * the bcast. (NAF - 2021/9/15) */ if (rank0_bcast) -#if MPI_VERSION >= 3 if (MPI_SUCCESS != MPI_Bcast(&bytes_read, 1, MPI_COUNT, 0, file->comm)) -#else - if (MPI_SUCCESS != MPI_Bcast(&bytes_read, 1, MPI_INT, 0, file->comm)) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Bcast failed", 0) - /* Get the type's size */ -#if MPI_VERSION >= 3 + /* Get the type's size */ if (MPI_SUCCESS != (mpi_code = MPI_Type_size_x(buf_type, &type_size))) -#else - if (MPI_SUCCESS != (mpi_code = MPI_Type_size(buf_type, &type_size))) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Type_size failed", mpi_code) /* Compute the actual number of bytes requested */ @@ -2275,13 +2223,8 @@ H5FD__mpio_read_vector(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, uint32_t cou do { assert(i >= 0); -#if MPI_VERSION >= 3 io_size = MIN(n, (MPI_Count)s_sizes[i]); bytes_read = (MPI_Count)s_sizes[i] - io_size; -#else - io_size = MIN(n, (int)s_sizes[i]); - bytes_read = (int)s_sizes[i] - io_size; -#endif assert(bytes_read >= 0); memset((char *)s_bufs[i] + bytes_read, 0, (size_t)io_size); @@ -2359,20 +2302,12 @@ H5FD__mpio_read_vector(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, uint32_t cou HMPI_GOTO_ERROR(FAIL, "MPI_File_read_at failed", mpi_code) - /* How many bytes were actually read? */ -#if MPI_VERSION >= 3 + /* How many bytes were actually read? */ if (MPI_SUCCESS != (mpi_code = MPI_Get_elements_x(&mpi_stat, MPI_BYTE, &bytes_read))) -#else - if (MPI_SUCCESS != (mpi_code = MPI_Get_elements(&mpi_stat, MPI_BYTE, &bytes_read))) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Get_elements failed", mpi_code) - /* Compute the actual number of bytes requested */ -#if MPI_VERSION >= 3 + /* Compute the actual number of bytes requested */ io_size = (MPI_Count)size; -#else - io_size = (int)size; -#endif /* Check for read failure */ if (bytes_read < 0 || bytes_read > io_size) @@ -3008,18 +2943,11 @@ H5FD__mpio_read_selection(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED d void *mpi_bufs_base = NULL; char unused = 0; /* Unused, except for non-NULL pointer value */ -#if H5_CHECK_MPI_VERSION(3, 0) MPI_Count bytes_read = 0; /* Number of bytes read in */ MPI_Count type_size; /* MPI datatype used for I/O's size */ MPI_Count io_size; /* Actual number of bytes requested */ MPI_Count n; -#else - int bytes_read = 0; /* Number of bytes read in */ - int type_size; /* MPI datatype used for I/O's size */ - int io_size; /* Actual number of bytes requested */ - int n; -#endif - bool rank0_bcast = false; /* If read-with-rank0-and-bcast flag was used */ + bool rank0_bcast = false; /* If read-with-rank0-and-bcast flag was used */ #ifdef H5FDmpio_DEBUG bool H5FD_mpio_debug_t_flag = (H5FD_mpio_debug_flags_s[(int)'t'] && H5FD_MPIO_TRACE_THIS_RANK(file)); bool H5FD_mpio_debug_r_flag = (H5FD_mpio_debug_flags_s[(int)'r'] && H5FD_MPIO_TRACE_THIS_RANK(file)); @@ -3209,11 +3137,7 @@ H5FD__mpio_read_selection(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED d /* Only retrieve bytes read if this rank _actually_ participated in I/O */ if (!rank0_bcast || (rank0_bcast && file->mpi_rank == 0)) { /* How many bytes were actually read? */ -#if H5_CHECK_MPI_VERSION(3, 0) if (MPI_SUCCESS != (mpi_code = MPI_Get_elements_x(&mpi_stat, final_mtype, &bytes_read))) { -#else - if (MPI_SUCCESS != (mpi_code = MPI_Get_elements(&mpi_stat, MPI_BYTE, &bytes_read))) { -#endif if (rank0_bcast && file->mpi_rank == 0) { /* If MPI_Get_elements(_x) fails for a rank 0 bcast strategy, * push an error, but continue to participate in the following @@ -3234,19 +3158,11 @@ H5FD__mpio_read_selection(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED d * of the data. (QAK - 2019/1/2) */ if (rank0_bcast) -#if H5_CHECK_MPI_VERSION(3, 0) if (MPI_SUCCESS != MPI_Bcast(&bytes_read, 1, MPI_COUNT, 0, file->comm)) -#else - if (MPI_SUCCESS != MPI_Bcast(&bytes_read, 1, MPI_INT, 0, file->comm)) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Bcast failed", 0); - /* Get the type's size */ -#if H5_CHECK_MPI_VERSION(3, 0) + /* Get the type's size */ if (MPI_SUCCESS != (mpi_code = MPI_Type_size_x(final_mtype, &type_size))) -#else - if (MPI_SUCCESS != (mpi_code = MPI_Type_size(final_mtype, &type_size))) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Type_size failed", mpi_code); /* Compute the actual number of bytes requested */ @@ -3382,15 +3298,9 @@ H5FD__mpio_write_selection(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED char unused = 0; /* Unused, except for non-NULL pointer value */ H5_flexible_const_ptr_t mbb; -#if H5_CHECK_MPI_VERSION(3, 0) MPI_Count bytes_written; MPI_Count type_size; /* MPI datatype used for I/O's size */ MPI_Count io_size; /* Actual number of bytes requested */ -#else - int bytes_written; - int type_size; /* MPI datatype used for I/O's size */ - int io_size; /* Actual number of bytes requested */ -#endif #ifdef H5FDmpio_DEBUG bool H5FD_mpio_debug_t_flag = (H5FD_mpio_debug_flags_s[(int)'t'] && H5FD_MPIO_TRACE_THIS_RANK(file)); @@ -3559,20 +3469,12 @@ H5FD__mpio_write_selection(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED H5FD_mpi_native_g, file->info))) HMPI_GOTO_ERROR(FAIL, "MPI_File_set_view failed", mpi_code); - /* How many bytes were actually written */ -#if H5_CHECK_MPI_VERSION(3, 0) + /* How many bytes were actually written */ if (MPI_SUCCESS != (mpi_code = MPI_Get_elements_x(&mpi_stat, final_mtype, &bytes_written))) -#else - if (MPI_SUCCESS != (mpi_code = MPI_Get_elements(&mpi_stat, MPI_BYTE, &bytes_written))) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Get_elements failed", mpi_code); - /* Get the type's size */ -#if H5_CHECK_MPI_VERSION(3, 0) + /* Get the type's size */ if (MPI_SUCCESS != (mpi_code = MPI_Type_size_x(final_mtype, &type_size))) -#else - if (MPI_SUCCESS != (mpi_code = MPI_Type_size(final_mtype, &type_size))) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Type_size failed", mpi_code); /* Compute the actual number of bytes requested */ diff --git a/src/H5FDmpio.h b/src/H5FDmpio.h index 96a93668ea7..60deec2c07b 100644 --- a/src/H5FDmpio.h +++ b/src/H5FDmpio.h @@ -48,8 +48,8 @@ H5_DLL hid_t H5FD_mpio_init(void); * \brief Stores MPI IO communicator information to the file access property list * * \fapl_id - * \param[in] comm MPI-2 communicator - * \param[in] info MPI-2 info object + * \param[in] comm MPI communicator + * \param[in] info MPI info object * \returns \herr_t * * \details H5Pset_fapl_mpio() stores the user-supplied MPI IO parameters \p @@ -61,12 +61,12 @@ H5_DLL hid_t H5FD_mpio_init(void); * and is not a collective function. * * \p comm is the MPI communicator to be used for file open, as defined - * in \c MPI_File_open of MPI-2. This function makes a duplicate of the + * in \c MPI_File_open of MPI. This function makes a duplicate of the * communicator, so modifications to \p comm after this function call * returns have no effect on the file access property list. * * \p info is the MPI Info object to be used for file open, as defined - * in MPI_File_open() of MPI-2. This function makes a duplicate copy of + * in MPI_File_open() of MPI. This function makes a duplicate copy of * the Info object, so modifications to the Info object after this * function call returns will have no effect on the file access * property list. @@ -96,8 +96,8 @@ H5_DLL herr_t H5Pset_fapl_mpio(hid_t fapl_id, MPI_Comm comm, MPI_Info info); * \brief Returns MPI IO communicator information * * \fapl_id - * \param[out] comm MPI-2 communicator - * \param[out] info MPI-2 info object + * \param[out] comm MPI communicator + * \param[out] info MPI info object * \returns \herr_t * * \details If the file access property list is set to the #H5FD_MPIO driver, diff --git a/src/H5Fmodule.h b/src/H5Fmodule.h index 8a3f8df9520..40ff6b4d703 100644 --- a/src/H5Fmodule.h +++ b/src/H5Fmodule.h @@ -1045,7 +1045,7 @@ * The file access properties managed by #H5Pset_fapl_mpio and retrieved by * #H5Pget_fapl_mpio are the MPI communicator, comm, and the MPI info object, info. comm and * info are used for file open. info is an information object much like an HDF5 property list. Both - * are defined in MPI_FILE_OPEN of MPI-2. + * are defined in MPI_FILE_OPEN of MPI. * * The communicator and the info object are saved in the file access property list fapl_id. * fapl_id can then be passed to MPI_FILE_OPEN to create and/or open the file. diff --git a/src/H5Smpio.c b/src/H5Smpio.c index 10a9cd5b38f..1e0fef5c3b7 100644 --- a/src/H5Smpio.c +++ b/src/H5Smpio.c @@ -197,13 +197,9 @@ H5S__mpio_create_point_datatype(size_t elmt_size, hsize_t num_points, MPI_Aint * int *inner_blocks = NULL; /* Arrays for MPI datatypes when "large" datatype needed */ MPI_Aint *inner_disps = NULL; MPI_Datatype *inner_types = NULL; -#if MPI_VERSION < 3 - int *blocks = NULL; /* Array of block sizes for MPI hindexed create call */ - hsize_t u; /* Local index variable */ -#endif - hsize_t bigio_count; /* Transition point to create derived type */ - int mpi_code; /* MPI error code */ - herr_t ret_value = SUCCEED; /* Return value */ + hsize_t bigio_count; /* Transition point to create derived type */ + int mpi_code; /* MPI error code */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -216,24 +212,10 @@ H5S__mpio_create_point_datatype(size_t elmt_size, hsize_t num_points, MPI_Aint * /* Check whether standard or BIGIO processing will be employeed */ if (bigio_count >= num_points) { -#if H5_CHECK_MPI_VERSION(3, 0) /* Create an MPI datatype for the whole point selection */ if (MPI_SUCCESS != (mpi_code = MPI_Type_create_hindexed_block((int)num_points, 1, disp, elmt_type, new_type))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_indexed_block failed", mpi_code) -#else - /* Allocate block sizes for MPI datatype call */ - if (NULL == (blocks = (int *)H5MM_malloc(sizeof(int) * num_points))) - HGOTO_ERROR(H5E_DATASPACE, H5E_CANTALLOC, FAIL, "can't allocate array of blocks"); - - for (u = 0; u < num_points; u++) - blocks[u] = 1; - - /* Create an MPI datatype for the whole point selection */ - if (MPI_SUCCESS != - (mpi_code = MPI_Type_create_hindexed((int)num_points, blocks, disp, elmt_type, new_type))) - HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code) -#endif /* Commit MPI datatype for later use */ if (MPI_SUCCESS != (mpi_code = MPI_Type_commit(new_type))) @@ -267,43 +249,20 @@ H5S__mpio_create_point_datatype(size_t elmt_size, hsize_t num_points, MPI_Aint * if (NULL == (inner_disps = (MPI_Aint *)H5MM_malloc(sizeof(MPI_Aint) * (size_t)total_types))) HGOTO_ERROR(H5E_DATASPACE, H5E_CANTALLOC, FAIL, "can't allocate array of blocks"); -#if MPI_VERSION < 3 - /* Allocate block sizes for MPI datatype call */ - if (NULL == (blocks = (int *)H5MM_malloc(sizeof(int) * bigio_count))) - HGOTO_ERROR(H5E_DATASPACE, H5E_CANTALLOC, FAIL, "can't allocate array of blocks"); - - for (u = 0; u < bigio_count; u++) - blocks[u] = 1; -#endif - for (i = 0; i < num_big_types; i++) { -#if H5_CHECK_MPI_VERSION(3, 0) if (MPI_SUCCESS != (mpi_code = MPI_Type_create_hindexed_block((int)bigio_count, 1, &disp[(hsize_t)i * bigio_count], elmt_type, &inner_types[i]))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed_block failed", mpi_code); -#else - if (MPI_SUCCESS != - (mpi_code = MPI_Type_create_hindexed((int)bigio_count, blocks, &disp[i * bigio_count], - elmt_type, &inner_types[i]))) - HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code) -#endif inner_blocks[i] = 1; inner_disps[i] = 0; } /* end for*/ if (remaining_points) { -#if H5_CHECK_MPI_VERSION(3, 0) if (MPI_SUCCESS != (mpi_code = MPI_Type_create_hindexed_block( remaining_points, 1, &disp[(hsize_t)num_big_types * bigio_count], elmt_type, &inner_types[num_big_types]))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed_block failed", mpi_code); -#else - if (MPI_SUCCESS != (mpi_code = MPI_Type_create_hindexed((int)remaining_points, blocks, - &disp[num_big_types * bigio_count], - elmt_type, &inner_types[num_big_types]))) - HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code) -#endif inner_blocks[num_big_types] = 1; inner_disps[num_big_types] = 0; } @@ -323,10 +282,6 @@ H5S__mpio_create_point_datatype(size_t elmt_size, hsize_t num_points, MPI_Aint * done: if (elmt_type_created) MPI_Type_free(&elmt_type); -#if MPI_VERSION < 3 - if (blocks) - H5MM_free(blocks); -#endif if (inner_types) H5MM_free(inner_types); if (inner_blocks) diff --git a/src/H5mpi.c b/src/H5mpi.c index 005a99aa6ae..2725ec5bf19 100644 --- a/src/H5mpi.c +++ b/src/H5mpi.c @@ -619,17 +619,12 @@ H5_mpio_gatherv_alloc(void *send_buf, int send_count, MPI_Datatype send_type, co const int displacements[], MPI_Datatype recv_type, bool allgather, int root, MPI_Comm comm, int mpi_rank, int mpi_size, void **out_buf, size_t *out_buf_num_entries) { - size_t recv_buf_num_entries = 0; - void *recv_buf = NULL; -#if H5_CHECK_MPI_VERSION(3, 0) + size_t recv_buf_num_entries = 0; + void *recv_buf = NULL; MPI_Count type_lb; MPI_Count type_extent; -#else - MPI_Aint type_lb; - MPI_Aint type_extent; -#endif - int mpi_code; - herr_t ret_value = SUCCEED; + int mpi_code; + herr_t ret_value = SUCCEED; FUNC_ENTER_NOAPI(FAIL) @@ -637,12 +632,8 @@ H5_mpio_gatherv_alloc(void *send_buf, int send_count, MPI_Datatype send_type, co if (allgather || (mpi_rank == root)) assert(out_buf && out_buf_num_entries); - /* Retrieve the extent of the MPI Datatype being used */ -#if H5_CHECK_MPI_VERSION(3, 0) + /* Retrieve the extent of the MPI Datatype being used */ if (MPI_SUCCESS != (mpi_code = MPI_Type_get_extent_x(recv_type, &type_lb, &type_extent))) -#else - if (MPI_SUCCESS != (mpi_code = MPI_Type_get_extent(recv_type, &type_lb, &type_extent))) -#endif HMPI_GOTO_ERROR(FAIL, "MPI_Type_get_extent(_x) failed", mpi_code) if (type_extent < 0)