mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-30 15:32:37 +08:00
Minor tweaks to new H5P MPI code based on code review feedback.
This commit is contained in:
parent
477bd6cd77
commit
937616872c
@ -792,20 +792,11 @@ H5FD__mpio_open(const char *name, unsigned flags, hid_t fapl_id,
|
||||
if(NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
|
||||
|
||||
/* Set MPI communicator and info object */
|
||||
if(H5P_FILE_ACCESS_DEFAULT == fapl_id || H5FD_MPIO != H5P_peek_driver(plist)) {
|
||||
/* Non-parallel defaults */
|
||||
if(FAIL == H5_mpi_comm_dup(MPI_COMM_SELF, &comm))
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, NULL, "communicator duplicate failed")
|
||||
info = MPI_INFO_NULL;
|
||||
}
|
||||
else {
|
||||
/* Get the MPI communicator and info object from the property list */
|
||||
if(H5P_get(plist, H5F_ACS_MPI_PARAMS_COMM_NAME, &comm) < 0)
|
||||
HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "can't get MPI communicator")
|
||||
if(H5P_get(plist, H5F_ACS_MPI_PARAMS_INFO_NAME, &info) < 0)
|
||||
HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "can't get MPI info object")
|
||||
}
|
||||
/* Get the MPI communicator and info object from the property list */
|
||||
if(H5P_get(plist, H5F_ACS_MPI_PARAMS_COMM_NAME, &comm) < 0)
|
||||
HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "can't get MPI communicator")
|
||||
if(H5P_get(plist, H5F_ACS_MPI_PARAMS_INFO_NAME, &info) < 0)
|
||||
HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "can't get MPI info object")
|
||||
|
||||
/* Convert HDF5 flags to MPI-IO flags */
|
||||
/* Some combinations are illegal; let MPI-IO figure it out */
|
||||
|
21
src/H5mpi.c
21
src/H5mpi.c
@ -239,6 +239,9 @@ H5_mpi_comm_cmp(MPI_Comm comm1, MPI_Comm comm2, int *result)
|
||||
|
||||
/* Can't pass MPI_COMM_NULL to MPI_Comm_compare() so we have to handle
|
||||
* it in special cases.
|
||||
*
|
||||
* MPI_Comm can either be an integer type or a pointer. We cast them
|
||||
* to intptr_t so we can compare them with < and > when needed.
|
||||
*/
|
||||
if (MPI_COMM_NULL == comm1 && MPI_COMM_NULL == comm2) {
|
||||
/* Special case of both communicators being MPI_COMM_NULL */
|
||||
@ -247,7 +250,7 @@ H5_mpi_comm_cmp(MPI_Comm comm1, MPI_Comm comm2, int *result)
|
||||
else if (MPI_COMM_NULL == comm1 || MPI_COMM_NULL == comm2) {
|
||||
|
||||
/* Special case of one communicator being MPI_COMM_NULL */
|
||||
*result = (MPI_Datatype)comm1 < (MPI_Datatype)comm2 ? -1 : 1;
|
||||
*result = (intptr_t)comm1 < (intptr_t)comm2 ? -1 : 1;
|
||||
}
|
||||
else {
|
||||
|
||||
@ -257,15 +260,11 @@ H5_mpi_comm_cmp(MPI_Comm comm1, MPI_Comm comm2, int *result)
|
||||
if (MPI_SUCCESS != (mpi_code = MPI_Comm_compare(comm1, comm2, &mpi_result)))
|
||||
HMPI_GOTO_ERROR(FAIL, "MPI_Comm_compare failed", mpi_code)
|
||||
|
||||
/* Set the result
|
||||
*
|
||||
* The else clause should work regardless of whether MPI_Datatype is
|
||||
* fundamentally an integer or a pointer.
|
||||
*/
|
||||
/* Set the result */
|
||||
if (MPI_IDENT == mpi_result || MPI_CONGRUENT == mpi_result)
|
||||
*result = 0;
|
||||
else
|
||||
*result = (MPI_Datatype)comm1 < (MPI_Datatype)comm2 ? -1 : 1;
|
||||
*result = (intptr_t)comm1 < (intptr_t)comm2 ? -1 : 1;
|
||||
}
|
||||
|
||||
done:
|
||||
@ -372,11 +371,15 @@ H5_mpi_info_cmp(MPI_Info info1, MPI_Info info2, int *result)
|
||||
} /* end else */
|
||||
} /* end else */
|
||||
|
||||
/* Set the output value */
|
||||
/* Set the output value
|
||||
*
|
||||
* MPI_Info can either be an integer type or a pointer. We cast them
|
||||
* to intptr_t so we can compare them with < and > when needed.
|
||||
*/
|
||||
if (same)
|
||||
*result = 0;
|
||||
else
|
||||
*result = (MPI_Datatype)info1 < (MPI_Datatype)info2 ? -1 : 1;
|
||||
*result = (intptr_t)info1 < (intptr_t)info2 ? -1 : 1;
|
||||
|
||||
done:
|
||||
if (key)
|
||||
|
Loading…
Reference in New Issue
Block a user