We are trying to update our installation of hdf5 from 1.8.14 to 1.8.15. I have a sequence of unit tests that repeatedly run a program with different parameters, checking the output of the program. This program is a C++ program that uses the hdf5 library in a serial manner (it doesn't use the parallel features of the library) but it also uses MPI. The unit tests are written in Python, and they may use h5py to check the output of the program. The unit tests will run the program using mpiexec locally with a few ranks. We have openmpi 1.8.1 installed. What I'm finding with hdf5 1.8.15, is that although each unit test seems to succeed, the whole script fails and I get some output:
*** The MPI_Comm_create_keyval() function was called after MPI_FINALIZE was invoked.
*** This is disallowed by the MPI standard.
*** Your MPI job will now abort.
[(null):16407] Local abort after MPI_FINALIZE completed successfully; not able to aggregate error messages, and not able to guarantee that all other processes were killed!
HDF5: infinite loop closing library
E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E
When I look through the hdf5 1.8.15 source code, I find in H5.c, the H5_init_library(void) function, that it does
int mpi_initialized;
MPI_Initialized(&mpi_initialized);
if (mpi_initialized) {
int key_val;
if(MPI_SUCCESS != (mpi_code = MPI_Comm_create_keyval(MPI_NULL_COPY_FN, ...
I'm not sure that this is correct. I wrote a small program that did
MPI_Init(&argc, &argv);
MPI_Finalize();
MPI_Initialized(&mpi_initialized);
MPI_Finalized(&mpi_finalized);
std::cout << "MPI_Finalize. mpi_initialized=" << mpi_initialized << " mpi_finalized=" << mpi_finalized << std::endl;
and I found that both mpi_initialized and mpi_finalized were 1 after I called MPI_Finalize. That is, I think H5_init_library() should check to see if MPI_Finalize has been called as well. I'm not sure what hdf5 call is triggering the error messages, it may happen when h5py unloads (we have h5py version 2.3.1).
I did try some simple programs that looked like
MPI_Init(&argc, &argv);
MPI_Finalize();
H5Fcreate // or some other simple h5 function calls
and I couldn't recreate those error messages, so maybe there is something else wrong.
best,
David Schneider
software engineer
LCLS, SLAC