summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/H5AC.c31
-rw-r--r--src/H5ACprivate.h5
-rw-r--r--src/H5C.c37
-rw-r--r--test/testframe.c4
-rw-r--r--testpar/t_cache.c119
-rw-r--r--testpar/t_dset.c60
-rw-r--r--testpar/testphdf5.c4
-rw-r--r--testpar/testphdf5.h1
8 files changed, 106 insertions, 155 deletions
diff --git a/src/H5AC.c b/src/H5AC.c
index db8446a..a26fae1 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -259,6 +259,7 @@ H5AC_init_interface(void)
H5P_genclass_t *xfer_pclass; /* Dataset transfer property list class object */
H5P_genplist_t *xfer_plist; /* Dataset transfer property list object */
unsigned block_before_meta_write; /* "block before meta write" property value */
+ unsigned coll_meta_write; /* "collective metadata write" property value */
unsigned library_internal=1; /* "library internal" property value */
H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode property value */
herr_t ret_value=SUCCEED; /* Return value */
@@ -272,6 +273,7 @@ H5AC_init_interface(void)
if (NULL == (xfer_pclass = H5I_object(H5P_CLS_DATASET_XFER_g)))
HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get property list class")
+
/* Get an ID for the blocking, collective H5AC dxpl */
if ((H5AC_dxpl_id=H5P_create_id(xfer_pclass,FALSE)) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
@@ -291,10 +293,12 @@ H5AC_init_interface(void)
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
- /* Set the transfer mode */
- xfer_mode=H5FD_MPIO_COLLECTIVE;
- if (H5P_set(xfer_plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value")
+ /* Insert 'collective metadata write' property */
+ coll_meta_write = 1;
+ if(H5P_insert(xfer_plist, H5AC_COLLECTIVE_META_WRITE_NAME, H5AC_COLLECTIVE_META_WRITE_SIZE, &coll_meta_write,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
+
/* Get an ID for the non-blocking, collective H5AC dxpl */
if ((H5AC_noblock_dxpl_id=H5P_create_id(xfer_pclass,FALSE)) < 0)
@@ -315,10 +319,12 @@ H5AC_init_interface(void)
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
- /* Set the transfer mode */
- xfer_mode=H5FD_MPIO_COLLECTIVE;
- if (H5P_set(xfer_plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value")
+ /* Insert 'collective metadata write' property */
+ coll_meta_write = 1;
+ if(H5P_insert(xfer_plist, H5AC_COLLECTIVE_META_WRITE_NAME, H5AC_COLLECTIVE_META_WRITE_SIZE, &coll_meta_write,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
+
/* Get an ID for the non-blocking, independent H5AC dxpl */
if ((H5AC_ind_dxpl_id=H5P_create_id(xfer_pclass,FALSE)) < 0)
@@ -339,10 +345,11 @@ H5AC_init_interface(void)
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
- /* Set the transfer mode */
- xfer_mode=H5FD_MPIO_INDEPENDENT;
- if (H5P_set(xfer_plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value")
+ /* Insert 'collective metadata write' property */
+ coll_meta_write = 0;
+ if(H5P_insert(xfer_plist, H5AC_COLLECTIVE_META_WRITE_NAME, H5AC_COLLECTIVE_META_WRITE_SIZE, &coll_meta_write,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
done:
FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h
index 17ce310..cc669a7 100644
--- a/src/H5ACprivate.h
+++ b/src/H5ACprivate.h
@@ -199,6 +199,11 @@ typedef H5C_t H5AC_t;
#define H5AC_BLOCK_BEFORE_META_WRITE_SIZE sizeof(unsigned)
#define H5AC_BLOCK_BEFORE_META_WRITE_DEF 0
+/* Definitions for "collective metadata write" property */
+#define H5AC_COLLECTIVE_META_WRITE_NAME "H5AC_collective_metadata_write"
+#define H5AC_COLLECTIVE_META_WRITE_SIZE sizeof(unsigned)
+#define H5AC_COLLECTIVE_META_WRITE_DEF 0
+
/* Definitions for "library internal" property */
#define H5AC_LIBRARY_INTERNAL_NAME "H5AC_library_internal"
#define H5AC_LIBRARY_INTERNAL_SIZE sizeof(unsigned)
diff --git a/src/H5C.c b/src/H5C.c
index c229a46..fa385fa 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -75,6 +75,9 @@
#include "H5private.h" /* Generic Functions */
+#ifdef H5_HAVE_PARALLEL
+#include "H5ACprivate.h" /* Metadata cache */
+#endif /* H5_HAVE_PARALLEL */
#include "H5Cpkg.h" /* Cache */
#include "H5Dprivate.h" /* Dataset functions */
#include "H5Eprivate.h" /* Error handling */
@@ -8277,37 +8280,27 @@ H5C_flush_single_entry(H5F_t * f,
#ifdef H5_HAVE_PARALLEL
#ifndef NDEBUG
-
/* If MPI based VFD is used, do special parallel I/O sanity checks.
* Note that we only do these sanity checks when the clear_only flag
* is not set, and the entry to be flushed is dirty. Don't bother
* otherwise as no file I/O can result.
*/
- if ( ( ! clear_only ) &&
- ( entry_ptr->is_dirty ) &&
- (H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI) ) ) {
-
- H5P_genplist_t *dxpl; /* Dataset transfer property list */
- H5FD_mpio_xfer_t xfer_mode; /* I/O xfer mode property value */
+ if(!clear_only && entry_ptr->is_dirty &&
+ H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI)) {
+ H5P_genplist_t *dxpl; /* Dataset transfer property list */
+ unsigned coll_meta; /* Collective metadata write flag */
/* Get the dataset transfer property list */
- if ( NULL == (dxpl = H5I_object(primary_dxpl_id)) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, \
- "not a dataset transfer property list")
- }
+ if(NULL == (dxpl = H5I_object(primary_dxpl_id)))
+ HGOTO_ERROR(H5E_CACHE, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
- /* Get the transfer mode property */
- if( H5P_get(dxpl, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0 ) {
-
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, \
- "can't retrieve xfer mode")
- }
-
- /* Sanity check transfer mode */
- HDassert( xfer_mode == H5FD_MPIO_COLLECTIVE );
- }
+ /* Get the collective metadata write property */
+ if(H5P_get(dxpl, H5AC_COLLECTIVE_META_WRITE_NAME, &coll_meta) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "can't retrieve xfer mode")
+ /* Sanity check collective metadata write flag */
+ HDassert(coll_meta);
+ } /* end if */
#endif /* NDEBUG */
#endif /* H5_HAVE_PARALLEL */
diff --git a/test/testframe.c b/test/testframe.c
index 8ab7a5b..af6e975 100644
--- a/test/testframe.c
+++ b/test/testframe.c
@@ -26,7 +26,7 @@
/*
* Definitions for the testing structure.
*/
-#define MAXNUMOFTESTS 50
+#define MAXNUMOFTESTS 60
#define MAXTESTNAME 16
#define MAXTESTDESC 64
@@ -73,7 +73,7 @@ AddTest(const char *TheName, void (*TheCall) (void), void (*Cleanup) (void), con
{
/* Sanity checking */
if (Index >= MAXNUMOFTESTS) {
- printf("Too many tests added, increase MAXNUMOFTEST(%d).\n",
+ printf("Too many tests added, increase MAXNUMOFTESTS(%d).\n",
MAXNUMOFTESTS);
exit(-1);
} /* end if */
diff --git a/testpar/t_cache.c b/testpar/t_cache.c
index 8f193cd..b0fea36 100644
--- a/testpar/t_cache.c
+++ b/testpar/t_cache.c
@@ -4218,125 +4218,6 @@ verify_writes(int num_writes,
/*****************************************************************************
*
- * Function: setup_noblock_dxpl_id()
- *
- * Purpose: Setup the noblock_dxpl_id global. Increment nerrors if
- * errors are detected. Do nothing if nerrors is non-zero
- * on entry.
- *
- * Return: void.
- *
- * Programmer: JRM -- 1/5/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-/* So far we haven't needed this, but that may change.
- * Keep it around for now
- */
-#if 0
-void
-setup_noblock_dxpl_id(void)
-{
- const char * fcn_name = "setup_noblock_dxpl_id()";
- H5P_genclass_t *xfer_pclass; /* Dataset transfer property list
- * class object
- */
- H5P_genplist_t *xfer_plist; /* Dataset transfer property list object */
- unsigned block_before_meta_write; /* "block before meta write"
- * property value
- */
- unsigned library_internal = 1; /* "library internal" property value */
- H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode property value */
-
- /* Sanity check */
- HDassert(H5P_CLS_DATASET_XFER_g!=(-1));
-
- /* Get the dataset transfer property list class object */
- if ( ( nerrors == 0 ) &&
- ( NULL == (xfer_pclass = H5I_object(H5P_CLS_DATASET_XFER_g)) ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: can't get property list class.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- /* Get an ID for the non-blocking, collective H5AC dxpl */
- if ( ( nerrors == 0 ) &&
- ( (noblock_dxpl_id = H5P_create_id(xfer_pclass)) < 0 ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: can't register property list.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- /* Get the property list object */
- if ( ( nerrors == 0 ) &&
- ( NULL == (xfer_plist = H5I_object(H5AC_noblock_dxpl_id)) ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: can't get new property list object.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- /* Insert 'block before metadata write' property */
- block_before_meta_write=0;
- if ( ( nerrors == 0 ) &&
- ( H5P_insert(xfer_plist, H5AC_BLOCK_BEFORE_META_WRITE_NAME,
- H5AC_BLOCK_BEFORE_META_WRITE_SIZE,
- &block_before_meta_write,
- NULL, NULL, NULL, NULL, NULL, NULL) < 0 ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout,
- "%d:%s: can't insert metadata cache dxpl property 1.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- /* Insert 'library internal' property */
- if ( ( nerrors == 0 ) &&
- ( H5P_insert(xfer_plist, H5AC_LIBRARY_INTERNAL_NAME,
- H5AC_LIBRARY_INTERNAL_SIZE, &library_internal,
- NULL, NULL, NULL, NULL, NULL, NULL ) < 0 ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout,
- "%d:%s: can't insert metadata cache dxpl property 2.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- /* Set the transfer mode */
- xfer_mode = H5FD_MPIO_COLLECTIVE;
- if ( ( nerrors == 0 ) &&
- ( H5P_set(xfer_plist, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0 ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: unable to set value.\n", world_mpi_rank,
- fcn_name);
- }
- }
-
- return(success);
-
-} /* setup_noblock_dxpl_id() */
-#endif
-
-
-/*****************************************************************************
- *
* Function: setup_rand()
*
* Purpose: Use gettimeofday() to obtain a seed for rand(), print the
diff --git a/testpar/t_dset.c b/testpar/t_dset.c
index 79a5555..4be0296 100644
--- a/testpar/t_dset.c
+++ b/testpar/t_dset.c
@@ -4038,3 +4038,63 @@ dataset_atomicity(void)
VRFY((ret >= 0), "H5Fclose succeeded");
}
+
+/* Function: dense_attr_test
+ *
+ * Purpose: Test cases for writing dense attributes in parallel
+ *
+ * Programmer: Quincey Koziol
+ * Date: April, 2013
+ */
+void
+test_dense_attr(void)
+{
+ int mpi_size, mpi_rank;
+ hid_t fpid, fid;
+ hid_t gid, gpid;
+ hid_t atFileSpace, atid;
+ hsize_t atDims[1] = {10000};
+ herr_t status;
+
+ /* set up MPI parameters */
+ MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+ MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+ fpid = H5Pcreate(H5P_FILE_ACCESS);
+ VRFY((fpid > 0), "H5Pcreate succeeded");
+ status = H5Pset_libver_bounds(fpid, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
+ VRFY((status >= 0), "H5Pset_libver_bounds succeeded");
+ status = H5Pset_fapl_mpio(fpid, MPI_COMM_WORLD, MPI_INFO_NULL);
+ VRFY((status >= 0), "H5Pset_fapl_mpio succeeded");
+ fid = H5Fcreate("ph5Dense.h5", H5F_ACC_TRUNC, H5P_DEFAULT, fpid);
+ VRFY((fid > 0), "H5Fcreate succeeded");
+ status = H5Pclose(fpid);
+ VRFY((status >= 0), "H5Pclose succeeded");
+
+ gpid = H5Pcreate(H5P_GROUP_CREATE);
+ VRFY((gpid > 0), "H5Pcreate succeeded");
+ status = H5Pset_attr_phase_change(gpid, 0, 0);
+ VRFY((status >= 0), "H5Pset_attr_phase_change succeeded");
+ gid = H5Gcreate2(fid, "foo", H5P_DEFAULT, gpid, H5P_DEFAULT);
+ VRFY((gid > 0), "H5Gcreate2 succeeded");
+ status = H5Pclose(gpid);
+ VRFY((status >= 0), "H5Pclose succeeded");
+
+ atFileSpace = H5Screate_simple(1, atDims, NULL);
+ VRFY((atFileSpace > 0), "H5Screate_simple succeeded");
+ atid = H5Acreate(gid, "bar", H5T_STD_U64LE, atFileSpace, H5P_DEFAULT, H5P_DEFAULT);
+ VRFY((atid > 0), "H5Acreate succeeded");
+ status = H5Sclose(atFileSpace);
+ VRFY((status >= 0), "H5Sclose succeeded");
+
+ status = H5Aclose(atid);
+ VRFY((status >= 0), "H5Aclose succeeded");
+
+ status = H5Gclose(gid);
+ VRFY((status >= 0), "H5Gclose succeeded");
+ status = H5Fclose(fid);
+ VRFY((status >= 0), "H5Fclose succeeded");
+
+ return;
+}
+
diff --git a/testpar/testphdf5.c b/testpar/testphdf5.c
index 784892a..89230f1 100644
--- a/testpar/testphdf5.c
+++ b/testpar/testphdf5.c
@@ -532,6 +532,10 @@ int main(int argc, char **argv)
"dataset atomic updates", PARATESTFILE);
}
+ AddTest("denseattr", test_dense_attr, NULL,
+ "Store Dense Attributes", NULL);
+
+
/* Display testing information */
TestInfo(argv[0]);
diff --git a/testpar/testphdf5.h b/testpar/testphdf5.h
index fa83697..15ff884 100644
--- a/testpar/testphdf5.h
+++ b/testpar/testphdf5.h
@@ -289,6 +289,7 @@ void file_image_daisy_chain_test(void);
#ifdef H5_HAVE_FILTER_DEFLATE
void compress_readAll(void);
#endif /* H5_HAVE_FILTER_DEFLATE */
+void test_dense_attr(void);
/* commonly used prototypes */
hid_t create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type, hbool_t use_gpfs);