[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:
Quincey Koziol 2013-04-02 21:50:50 -05:00
parent 0b16cecb99
commit b4331b2ff3
8 changed files with 106 additions and 155 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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 */

View File

@ -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 */

View File

@ -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()

View File

@ -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;
}

View File

@ -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]);

View File

@ -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);