summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MANIFEST2
-rw-r--r--src/H5.c80
-rw-r--r--testpar/CMakeLists.txt2
-rw-r--r--testpar/Makefile.am5
-rw-r--r--testpar/Makefile.in34
-rw-r--r--testpar/t_pflush1.c11
-rw-r--r--testpar/t_pflush2.c3
-rw-r--r--testpar/t_prestart.c138
-rw-r--r--testpar/t_pshutdown.c127
-rw-r--r--testpar/t_shapesame.c3
-rw-r--r--testpar/testphdf5.h1
-rw-r--r--tools/perform/perf.c3
12 files changed, 45 insertions, 364 deletions
diff --git a/MANIFEST b/MANIFEST
index cd8133c..34c60e4 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1146,8 +1146,6 @@
./testpar/t_pflush2.c
./testpar/t_prop.c
./testpar/t_shapesame.c
-./testpar/t_pshutdown.c
-./testpar/t_prestart.c
./testpar/t_span_tree.c
./testpar/testpar.h
./testpar/testphdf5.c
diff --git a/src/H5.c b/src/H5.c
index 52dc566..af8b668 100644
--- a/src/H5.c
+++ b/src/H5.c
@@ -52,9 +52,7 @@
/* Local Prototypes */
/********************/
static void H5_debug_mask(const char*);
-#ifdef H5_HAVE_PARALLEL
-static int H5_mpi_delete_cb(MPI_Comm comm, int keyval, void *attr_val, int *flag);
-#endif /*H5_HAVE_PARALLEL*/
+
/*********************/
/* Package Variables */
@@ -111,43 +109,6 @@ H5_init_library(void)
herr_t ret_value = SUCCEED;
FUNC_ENTER_NOAPI(FAIL)
-
-#ifdef H5_HAVE_PARALLEL
- {
- int mpi_initialized;
- int mpi_code;
-
- MPI_Initialized(&mpi_initialized);
-
-#ifdef H5_HAVE_MPE
- /* Initialize MPE instrumentation library. */
- if (!H5_MPEinit_g)
- {
- int mpe_code;
- if (mpi_initialized){
- mpe_code = MPE_Init_log();
- HDassert(mpe_code >=0);
- H5_MPEinit_g = TRUE;
- }
- }
-#endif /*H5_HAVE_MPE*/
-
- /* add an attribute on MPI_COMM_SELF to call H5_term_library
- when it is destroyed, i.e. on MPI_Finalize */
- if (mpi_initialized) {
- int key_val;
-
- if(MPI_SUCCESS != (mpi_code = MPI_Comm_create_keyval(MPI_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)
-
- if(MPI_SUCCESS != (mpi_code = MPI_Comm_set_attr(MPI_COMM_SELF, key_val, NULL)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Comm_set_attr failed", mpi_code)
- }
- }
-#endif /*H5_HAVE_PARALLEL*/
-
/*
* Make sure the package information is updated.
*/
@@ -171,6 +132,24 @@ H5_init_library(void)
H5_debug_g.pkg[H5_PKG_V].name = "v";
H5_debug_g.pkg[H5_PKG_Z].name = "z";
+#ifdef H5_HAVE_MPE
+ /* Initialize MPE instrumentation library. May need to move this
+ * up earlier if any of the above initialization involves using
+ * the instrumentation code.
+ */
+ if (!H5_MPEinit_g)
+ {
+ int mpe_code;
+ int mpi_initialized;
+ MPI_Initialized(&mpi_initialized);
+ if (mpi_initialized){
+ mpe_code = MPE_Init_log();
+ HDassert(mpe_code >=0);
+ H5_MPEinit_g = TRUE;
+ }
+ }
+#endif
+
/*
* Install atexit() library cleanup routines unless the H5dont_atexit()
* has been called. Once we add something to the atexit() list it stays
@@ -601,27 +580,6 @@ H5_debug_mask(const char *s)
}
} /* end H5_debug_mask() */
-#ifdef H5_HAVE_PARALLEL
-
-/*-------------------------------------------------------------------------
- * Function: H5_mpi_delete_cb
- *
- * Purpose: Callback attribute on MPI_COMM_SELF to terminate the HDF5
- * library when the communicator is destroyed, i.e. on MPI_Finalize.
- *
- * Return: MPI_SUCCESS
- *
- * Programmer: Mohamad Chaarawi, February 2015
- *
- *-------------------------------------------------------------------------
- */
-static int H5_mpi_delete_cb(MPI_Comm UNUSED comm, int UNUSED keyval, void UNUSED *attr_val, int UNUSED *flag)
-{
- H5_term_library();
- return MPI_SUCCESS;
-}
-#endif /*H5_HAVE_PARALLEL*/
-
/*-------------------------------------------------------------------------
* Function: H5get_libversion
diff --git a/testpar/CMakeLists.txt b/testpar/CMakeLists.txt
index d1db0b7..11437c0 100644
--- a/testpar/CMakeLists.txt
+++ b/testpar/CMakeLists.txt
@@ -46,8 +46,6 @@ set (H5P_TESTS
t_cache
t_pflush1
t_pflush2
- t_pshutdown
- t_prestart
t_shapesame
)
diff --git a/testpar/Makefile.am b/testpar/Makefile.am
index 1eae439..448f745 100644
--- a/testpar/Makefile.am
+++ b/testpar/Makefile.am
@@ -25,7 +25,7 @@ AM_CPPFLAGS+=-I$(top_srcdir)/src -I$(top_srcdir)/test
# Test programs. These are our main targets.
#
-TEST_PROG_PARA=t_mpi testphdf5 t_cache t_pflush1 t_pflush2 t_pshutdown t_prestart t_shapesame
+TEST_PROG_PARA=t_mpi testphdf5 t_cache t_pflush1 t_pflush2 t_shapesame
check_PROGRAMS = $(TEST_PROG_PARA)
@@ -39,8 +39,7 @@ LDADD = $(LIBH5TEST) $(LIBHDF5)
# Temporary files
# MPItest.h5 is from t_mpi
# Para*.h5 are from testphdf
-# shutdown.h5 is from t_pshutdown
# go is used for debugging. See testphdf5.c.
-CHECK_CLEANFILES+=MPItest.h5 Para*.h5 CacheTestDummy.h5 shutdown.h5 go
+CHECK_CLEANFILES+=MPItest.h5 Para*.h5 CacheTestDummy.h5 go
include $(top_srcdir)/config/conclude.am
diff --git a/testpar/Makefile.in b/testpar/Makefile.in
index 959731e..8857d47 100644
--- a/testpar/Makefile.in
+++ b/testpar/Makefile.in
@@ -112,8 +112,7 @@ CONFIG_HEADER = $(top_builddir)/src/H5config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__EXEEXT_1 = t_mpi$(EXEEXT) testphdf5$(EXEEXT) t_cache$(EXEEXT) \
- t_pflush1$(EXEEXT) t_pflush2$(EXEEXT) t_pshutdown$(EXEEXT) \
- t_prestart$(EXEEXT) t_shapesame$(EXEEXT)
+ t_pflush1$(EXEEXT) t_pflush2$(EXEEXT) t_shapesame$(EXEEXT)
t_cache_SOURCES = t_cache.c
t_cache_OBJECTS = t_cache.$(OBJEXT)
t_cache_LDADD = $(LDADD)
@@ -134,14 +133,6 @@ t_pflush2_SOURCES = t_pflush2.c
t_pflush2_OBJECTS = t_pflush2.$(OBJEXT)
t_pflush2_LDADD = $(LDADD)
t_pflush2_DEPENDENCIES = $(LIBH5TEST) $(LIBHDF5)
-t_prestart_SOURCES = t_prestart.c
-t_prestart_OBJECTS = t_prestart.$(OBJEXT)
-t_prestart_LDADD = $(LDADD)
-t_prestart_DEPENDENCIES = $(LIBH5TEST) $(LIBHDF5)
-t_pshutdown_SOURCES = t_pshutdown.c
-t_pshutdown_OBJECTS = t_pshutdown.$(OBJEXT)
-t_pshutdown_LDADD = $(LDADD)
-t_pshutdown_DEPENDENCIES = $(LIBH5TEST) $(LIBHDF5)
t_shapesame_SOURCES = t_shapesame.c
t_shapesame_OBJECTS = t_shapesame.$(OBJEXT)
t_shapesame_LDADD = $(LDADD)
@@ -188,10 +179,10 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = t_cache.c t_mpi.c t_pflush1.c t_pflush2.c t_prestart.c \
- t_pshutdown.c t_shapesame.c $(testphdf5_SOURCES)
-DIST_SOURCES = t_cache.c t_mpi.c t_pflush1.c t_pflush2.c t_prestart.c \
- t_pshutdown.c t_shapesame.c $(testphdf5_SOURCES)
+SOURCES = t_cache.c t_mpi.c t_pflush1.c t_pflush2.c t_shapesame.c \
+ $(testphdf5_SOURCES)
+DIST_SOURCES = t_cache.c t_mpi.c t_pflush1.c t_pflush2.c t_shapesame.c \
+ $(testphdf5_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -696,14 +687,13 @@ TRACE = perl $(top_srcdir)/bin/trace
# Temporary files
# MPItest.h5 is from t_mpi
# Para*.h5 are from testphdf
-# shutdown.h5 is from t_pshutdown
# go is used for debugging. See testphdf5.c.
CHECK_CLEANFILES = *.chkexe *.chklog *.clog MPItest.h5 Para*.h5 \
- CacheTestDummy.h5 shutdown.h5 go
+ CacheTestDummy.h5 go
# Test programs. These are our main targets.
#
-TEST_PROG_PARA = t_mpi testphdf5 t_cache t_pflush1 t_pflush2 t_pshutdown t_prestart t_shapesame
+TEST_PROG_PARA = t_mpi testphdf5 t_cache t_pflush1 t_pflush2 t_shapesame
testphdf5_SOURCES = testphdf5.c t_dset.c t_file.c t_file_image.c t_mdset.c \
t_ph5basic.c t_coll_chunk.c t_span_tree.c t_chunk_alloc.c t_filter_read.c \
t_prop.c
@@ -792,14 +782,6 @@ t_pflush2$(EXEEXT): $(t_pflush2_OBJECTS) $(t_pflush2_DEPENDENCIES) $(EXTRA_t_pfl
@rm -f t_pflush2$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(t_pflush2_OBJECTS) $(t_pflush2_LDADD) $(LIBS)
-t_prestart$(EXEEXT): $(t_prestart_OBJECTS) $(t_prestart_DEPENDENCIES) $(EXTRA_t_prestart_DEPENDENCIES)
- @rm -f t_prestart$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(t_prestart_OBJECTS) $(t_prestart_LDADD) $(LIBS)
-
-t_pshutdown$(EXEEXT): $(t_pshutdown_OBJECTS) $(t_pshutdown_DEPENDENCIES) $(EXTRA_t_pshutdown_DEPENDENCIES)
- @rm -f t_pshutdown$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(t_pshutdown_OBJECTS) $(t_pshutdown_LDADD) $(LIBS)
-
t_shapesame$(EXEEXT): $(t_shapesame_OBJECTS) $(t_shapesame_DEPENDENCIES) $(EXTRA_t_shapesame_DEPENDENCIES)
@rm -f t_shapesame$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(t_shapesame_OBJECTS) $(t_shapesame_LDADD) $(LIBS)
@@ -826,9 +808,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_pflush1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_pflush2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_ph5basic.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_prestart.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_prop.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_pshutdown.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_shapesame.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_span_tree.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testphdf5.Po@am__quote@
diff --git a/testpar/t_pflush1.c b/testpar/t_pflush1.c
index 1bcfeb8..ebe5c38 100644
--- a/testpar/t_pflush1.c
+++ b/testpar/t_pflush1.c
@@ -164,9 +164,12 @@ main(int argc, char* argv[])
} /* end else */
/*
- * Some systems like AIX do not like files not closed when MPI_Finalize
- * is called. So, we need to get the MPI file handles, close them by hand.
- * Then the _exit is still needed to stop at_exit from happening in some systems.
+ * Some systems like Linux with mpich, if you just _exit without MPI_Finalize
+ * called, it would terminate but left the launching process waiting forever.
+ * OTHO, some systems like AIX do not like files not closed when MPI_Finalize
+ * is called. So, we need to get the MPI file handles, close them by hand,
+ * then MPI_Finalize. Then the _exit is still needed to stop at_exit from
+ * happening in some systems.
* Note that MPIO VFD returns the address of the file-handle in the VFD struct
* because MPI_File_close wants to modify the file-handle variable.
*/
@@ -192,11 +195,13 @@ main(int argc, char* argv[])
fflush(stdout);
fflush(stderr);
+ MPI_Finalize();
HD_exit(0);
error:
fflush(stdout);
fflush(stderr);
+ MPI_Finalize();
HD_exit(1);
}
diff --git a/testpar/t_pflush2.c b/testpar/t_pflush2.c
index 03f7c82..e450f75 100644
--- a/testpar/t_pflush2.c
+++ b/testpar/t_pflush2.c
@@ -209,6 +209,9 @@ main(int argc, char* argv[])
puts(" Test not compatible with current Virtual File Driver");
}
+ /* close HDF5 library */
+ H5close();
+
MPI_Finalize();
return 0;
diff --git a/testpar/t_prestart.c b/testpar/t_prestart.c
deleted file mode 100644
index 8f20842..0000000
--- a/testpar/t_prestart.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * Programmer: Mohamad Chaarawi
- * February 2015
- *
- * Purpose: This test opens a file created by the t_pshutdown program
- * and makes sure the objects created are there.
- */
-
-#include "testphdf5.h"
-
-int nerrors = 0; /* errors count */
-
-const char *FILENAME[] = {
- "shutdown",
- NULL
-};
-
-int
-main (int argc, char **argv)
-{
- hid_t file_id, dset_id, grp_id;
- hid_t fapl, sid, mem_dataspace;
- herr_t ret;
- char filename[1024];
- int mpi_size, mpi_rank, ndims, i, j;
- MPI_Comm comm = MPI_COMM_WORLD;
- MPI_Info info = MPI_INFO_NULL;
- hsize_t dims[RANK];
- hsize_t start[RANK];
- hsize_t count[RANK];
- hsize_t stride[RANK];
- hsize_t block[RANK];
- DATATYPE *data_array = NULL, *dataptr; /* data buffer */
-
- MPI_Init(&argc, &argv);
- MPI_Comm_size(comm, &mpi_size);
- MPI_Comm_rank(comm, &mpi_rank);
-
- if(MAINPROCESS)
- TESTING("proper shutdown of HDF5 library");
-
- /* Set up file access property list with parallel I/O access */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- VRFY((fapl >= 0), "H5Pcreate succeeded");
- ret = H5Pset_fapl_mpio(fapl, comm, info);
- VRFY((ret >= 0), "");
-
- h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
- file_id = H5Fopen(filename, H5F_ACC_RDONLY, fapl);
- VRFY((file_id >= 0), "H5Fopen succeeded");
-
- grp_id = H5Gopen(file_id, "Group", H5P_DEFAULT);
- VRFY((grp_id >= 0), "H5Gopen succeeded");
-
- dset_id = H5Dopen(grp_id, "Dataset", H5P_DEFAULT);
- VRFY((dset_id >= 0), "H5Dopen succeeded");
-
- sid = H5Dget_space(dset_id);
- VRFY((dset_id >= 0), "H5Dget_space succeeded");
-
- ndims = H5Sget_simple_extent_dims(sid, dims, NULL);
- VRFY((ndims == 2), "H5Sget_simple_extent_dims succeeded");
- VRFY(dims[0] == ROW_FACTOR*mpi_size, "Wrong dataset dimensions");
- VRFY(dims[1] == COL_FACTOR*mpi_size, "Wrong dataset dimensions");
-
- /* allocate memory for data buffer */
- data_array = (DATATYPE *)HDmalloc(dims[0]*dims[1]*sizeof(DATATYPE));
- VRFY((data_array != NULL), "data_array HDmalloc succeeded");
-
- /* Each process takes a slabs of rows. */
- block[0] = dims[0]/mpi_size;
- block[1] = dims[1];
- stride[0] = block[0];
- stride[1] = block[1];
- count[0] = 1;
- count[1] = 1;
- start[0] = mpi_rank*block[0];
- start[1] = 0;
-
- ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, start, stride, count, block);
- VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
-
- /* create a memory dataspace independently */
- mem_dataspace = H5Screate_simple (RANK, block, NULL);
- VRFY((mem_dataspace >= 0), "");
-
- /* write data independently */
- ret = H5Dread(dset_id, H5T_NATIVE_INT, mem_dataspace, sid,
- H5P_DEFAULT, data_array);
- VRFY((ret >= 0), "H5Dwrite succeeded");
-
- dataptr = data_array;
-
- for (i=0; i < block[0]; i++){
- for (j=0; j < block[1]; j++){
- if(*dataptr != mpi_rank+1) {
- printf("Dataset Verify failed at [%lu][%lu](row %lu, col %lu): expect %d, got %d\n",
- (unsigned long)i, (unsigned long)j,
- (unsigned long)(i+start[0]), (unsigned long)(j+start[1]),
- mpi_rank+1, *(dataptr));
- nerrors ++;
- }
- dataptr++;
- }
- }
- MPI_Finalize();
- HDremove(filename);
-
- /* release data buffers */
- if(data_array)
- HDfree(data_array);
-
- nerrors += GetTestNumErrs();
-
- if(MAINPROCESS) {
- if(0 == nerrors)
- PASSED()
- else
- H5_FAILED()
- }
-
- return (nerrors!=0);
-}
diff --git a/testpar/t_pshutdown.c b/testpar/t_pshutdown.c
deleted file mode 100644
index 7086aa6..0000000
--- a/testpar/t_pshutdown.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * Programmer: Mohamad Chaarawi
- * February 2015
- *
- * Purpose: This test creates a file and a bunch of objects in the
- * file and then calls MPI_Finalize without closing anything. The
- * library should exercise the attribute callback destroy attached to
- * MPI_COMM_SELF and terminate the HDF5 library closing all open
- * objects. The t_prestart test will read back the file and make sure
- * all created objects are there.
- */
-
-#include "testphdf5.h"
-
-int nerrors = 0; /* errors count */
-
-const char *FILENAME[] = {
- "shutdown",
- NULL
-};
-
-int
-main (int argc, char **argv)
-{
- hid_t file_id, dset_id, grp_id;
- hid_t fapl, sid, mem_dataspace;
- hsize_t dims[RANK], i;
- herr_t ret;
- char filename[1024];
- int mpi_size, mpi_rank;
- MPI_Comm comm = MPI_COMM_WORLD;
- MPI_Info info = MPI_INFO_NULL;
- hsize_t start[RANK];
- hsize_t count[RANK];
- hsize_t stride[RANK];
- hsize_t block[RANK];
- DATATYPE *data_array = NULL; /* data buffer */
-
- MPI_Init(&argc, &argv);
- MPI_Comm_size(comm, &mpi_size);
- MPI_Comm_rank(comm, &mpi_rank);
-
- if(MAINPROCESS)
- TESTING("proper shutdown of HDF5 library");
-
- /* Set up file access property list with parallel I/O access */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- VRFY((fapl >= 0), "H5Pcreate succeeded");
- ret = H5Pset_fapl_mpio(fapl, comm, info);
- VRFY((ret >= 0), "");
-
- h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
- file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
- VRFY((file_id >= 0), "H5Fcreate succeeded");
- grp_id = H5Gcreate(file_id, "Group", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VRFY((grp_id >= 0), "H5Gcreate succeeded");
-
- dims[0] = ROW_FACTOR*mpi_size;
- dims[1] = COL_FACTOR*mpi_size;
- sid = H5Screate_simple (RANK, dims, NULL);
- VRFY((sid >= 0), "H5Screate_simple succeeded");
-
- dset_id = H5Dcreate2(grp_id, "Dataset", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VRFY((dset_id >= 0), "H5Dcreate succeeded");
-
- /* allocate memory for data buffer */
- data_array = (DATATYPE *)HDmalloc(dims[0]*dims[1]*sizeof(DATATYPE));
- VRFY((data_array != NULL), "data_array HDmalloc succeeded");
-
- /* Each process takes a slabs of rows. */
- block[0] = dims[0]/mpi_size;
- block[1] = dims[1];
- stride[0] = block[0];
- stride[1] = block[1];
- count[0] = 1;
- count[1] = 1;
- start[0] = mpi_rank*block[0];
- start[1] = 0;
-
- /* put some trivial data in the data_array */
- for(i=0 ; i<dims[0]*dims[1]; i++)
- data_array[i] = mpi_rank + 1;
-
- ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, start, stride, count, block);
- VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
-
- /* create a memory dataspace independently */
- mem_dataspace = H5Screate_simple (RANK, block, NULL);
- VRFY((mem_dataspace >= 0), "");
-
- /* write data independently */
- ret = H5Dwrite(dset_id, H5T_NATIVE_INT, mem_dataspace, sid,
- H5P_DEFAULT, data_array);
- VRFY((ret >= 0), "H5Dwrite succeeded");
-
- /* release data buffers */
- if(data_array)
- HDfree(data_array);
-
- MPI_Finalize();
-
- nerrors += GetTestNumErrs();
-
- if(MAINPROCESS) {
- if(0 == nerrors)
- PASSED()
- else
- H5_FAILED()
- }
-
- return (nerrors!=0);
-}
diff --git a/testpar/t_shapesame.c b/testpar/t_shapesame.c
index 9088470..d167687 100644
--- a/testpar/t_shapesame.c
+++ b/testpar/t_shapesame.c
@@ -5142,7 +5142,10 @@ int main(int argc, char **argv)
printf("Shape Same tests finished with no errors\n");
printf("===================================\n");
}
+ /* close HDF5 library */
+ H5close();
+ /* MPI_Finalize must be called AFTER H5close which may use MPI calls */
MPI_Finalize();
/* cannot just return (nerrors) because exit code is limited to 1byte */
diff --git a/testpar/testphdf5.h b/testpar/testphdf5.h
index 8338ce2..3597b17 100644
--- a/testpar/testphdf5.h
+++ b/testpar/testphdf5.h
@@ -301,5 +301,4 @@ int dataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[],
hsize_t block[], DATATYPE *dataset, DATATYPE *original);
void point_set (hsize_t start[], hsize_t count[], hsize_t stride[], hsize_t block[],
size_t num_points, hsize_t coords[], int order);
-
#endif /* PHDF5TEST_H */
diff --git a/tools/perform/perf.c b/tools/perform/perf.c
index 1bd33b6..58db6cc 100644
--- a/tools/perform/perf.c
+++ b/tools/perform/perf.c
@@ -391,6 +391,9 @@ die_jar_jar_die:
free(tmp);
if (opt_correct) free(tmp2);
+ /* close HDF5 library */
+ H5close();
+
MPI_Finalize();
return(0);