mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-18 15:15:56 +08:00
[svn-r23529] Description:
Stop aliasing property to indicate internal collective metadata operations with property to perform collective raw data operations from the application. Tested on: Mac OSX/64 10.8.3 (amazon) w/paralllel
This commit is contained in:
parent
0b16cecb99
commit
b4331b2ff3
31
src/H5AC.c
31
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)
|
||||
|
@ -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)
|
||||
|
37
src/H5C.c
37
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)) ) {
|
||||
if(NULL == (dxpl = H5I_object(primary_dxpl_id)))
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
|
||||
|
||||
HGOTO_ERROR(H5E_ARGS, 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 */
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -4216,125 +4216,6 @@ verify_writes(int num_writes,
|
||||
} /* verify_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()
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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]);
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user