mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-25 17:00:45 +08:00
[svn-r5799] Purpose:
New feature. Description: Added MPI-posix VFL driver. This driver uses MPI to coordinate actions, but performs I/O directly with posix sec(2) I/O functions. This driver should _NOT_ be used if the file accessed is not on a parallel filesystem. Platforms tested: FreeBSD 4.6 (sleipnir) w/parallel & IRIX64 6.5 (modi4) w/parallel
This commit is contained in:
parent
c3b0c0f3c4
commit
363ec52b7c
38
src/H5D.c
38
src/H5D.c
@ -30,10 +30,12 @@
|
||||
/*#define H5D_DEBUG*/
|
||||
|
||||
/*
|
||||
* The MPIO driver is needed because there are kludges in this file and
|
||||
* places where we check for things that aren't handled by this driver.
|
||||
* The MPIO & MPIPOSIX drivers are needed because there are kludges in this
|
||||
* file and places where we check for things that aren't handled by these
|
||||
* drivers.
|
||||
*/
|
||||
#include "H5FDmpio.h"
|
||||
#include "H5FDmpiposix.h"
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/* Remove this if H5R_DATASET_REGION is no longer used in this file */
|
||||
@ -1541,8 +1543,8 @@ H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type,
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to locate insertion point");
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/* If MPIO is used, no filter support yet. */
|
||||
if(IS_H5FD_MPIO(f) && dcpl_pline.nfilters > 0)
|
||||
/* If MPIO or MPIPOSIX is used, no filter support yet. */
|
||||
if((IS_H5FD_MPIO(f) || IS_H5FD_MPIPOSIX(f)) && dcpl_pline.nfilters > 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, NULL, "Parallel I/O does not support filters yet");
|
||||
#endif /*H5_HAVE_PARALLEL*/
|
||||
|
||||
@ -2018,8 +2020,8 @@ H5D_open_oid(H5G_entry_t *ent)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set pipeline");
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/* If MPIO is used, no filter support yet. */
|
||||
if(IS_H5FD_MPIO(dataset->ent.file) && pline.nfilters > 0)
|
||||
/* If MPIO or MPIPOSIX is used, no filter support yet. */
|
||||
if((IS_H5FD_MPIO(dataset->ent.file) || IS_H5FD_MPIPOSIX(dataset->ent.file)) && pline.nfilters > 0)
|
||||
HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, NULL, "Parallel IO does not support filters yet");
|
||||
#endif /*H5_HAVE_PARALLEL*/
|
||||
|
||||
@ -2224,7 +2226,7 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
|
||||
H5S_t *free_this_space=NULL; /*data space to free */
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
H5FD_mpio_dxpl_t *dx = NULL;
|
||||
H5FD_mpio_xfer_t xfer_mode; /*xfer_mode for this request */
|
||||
H5FD_mpio_xfer_t xfer_mode=H5FD_MPIO_INDEPENDENT; /*xfer_mode for this request */
|
||||
hbool_t xfer_mode_changed=0; /*xfer_mode needs restore */
|
||||
hbool_t doing_mpio=0; /*This is an MPIO access */
|
||||
#endif /*H5_HAVE_PARALLEL*/
|
||||
@ -2280,10 +2282,10 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
|
||||
xfer_mode = dx->xfer_mode;
|
||||
}
|
||||
} /* end if */
|
||||
/* Collective access is not permissible without the MPIO driver */
|
||||
/* Collective access is not permissible without the MPIO or MPIPOSIX driver */
|
||||
if (doing_mpio && xfer_mode==H5FD_MPIO_COLLECTIVE &&
|
||||
!(IS_H5FD_MPIO(dataset->ent.file)))
|
||||
HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "collective access for MPIO driver only");
|
||||
!(IS_H5FD_MPIO(dataset->ent.file) || IS_H5FD_MPIPOSIX(dataset->ent.file)))
|
||||
HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "collective access for MPIO & MPIPOSIX drivers only");
|
||||
|
||||
/* Set the "parallel I/O possible" flag, for H5S_find() */
|
||||
if (H5S_mpi_opt_types_g && IS_H5FD_MPIO(dataset->ent.file)) {
|
||||
@ -2640,7 +2642,7 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
|
||||
H5S_t *free_this_space=NULL; /*data space to free */
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
H5FD_mpio_dxpl_t *dx = NULL;
|
||||
H5FD_mpio_xfer_t xfer_mode; /*xfer_mode for this request */
|
||||
H5FD_mpio_xfer_t xfer_mode=H5FD_MPIO_INDEPENDENT; /*xfer_mode for this request */
|
||||
hbool_t xfer_mode_changed=0; /*xfer_mode needs restore */
|
||||
hbool_t doing_mpio=0; /*This is an MPIO access */
|
||||
#endif /*H5_HAVE_PARALLEL*/
|
||||
@ -2677,17 +2679,17 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list");
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/* If MPIO is used, no VL datatype support yet. */
|
||||
/* If MPIO or MPIPOSIX is used, no VL datatype support yet. */
|
||||
/* This is because they use the global heap in the file and we don't */
|
||||
/* support parallel access of that yet */
|
||||
if (IS_H5FD_MPIO(dataset->ent.file) && H5T_get_class(mem_type)==H5T_VLEN)
|
||||
if ( (IS_H5FD_MPIO(dataset->ent.file) || IS_H5FD_MPIPOSIX(dataset->ent.file)) && H5T_get_class(mem_type)==H5T_VLEN)
|
||||
HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "Parallel IO does not support writing VL datatypes yet");
|
||||
#endif /*H5_HAVE_PARALLEL*/
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/* If MPIO is used, no dataset region reference support yet. */
|
||||
/* If MPIO or MPIPOSIX is used, no dataset region reference datatype support yet. */
|
||||
/* This is because they use the global heap in the file and we don't */
|
||||
/* support parallel access of that yet */
|
||||
if (IS_H5FD_MPIO(dataset->ent.file) &&
|
||||
if ((IS_H5FD_MPIO(dataset->ent.file) || IS_H5FD_MPIPOSIX(dataset->ent.file)) &&
|
||||
H5T_get_class(mem_type)==H5T_REFERENCE &&
|
||||
H5T_get_ref_type(mem_type)==H5R_DATASET_REGION)
|
||||
HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "Parallel IO does not support writing region reference datatypes yet");
|
||||
@ -2715,9 +2717,9 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
|
||||
xfer_mode = dx->xfer_mode;
|
||||
}
|
||||
} /* end if */
|
||||
/* Collective access is not permissible without the MPIO driver */
|
||||
/* Collective access is not permissible without the MPIO or MPIPOSIX driver */
|
||||
if (doing_mpio && xfer_mode==H5FD_MPIO_COLLECTIVE &&
|
||||
!(IS_H5FD_MPIO(dataset->ent.file)))
|
||||
!(IS_H5FD_MPIO(dataset->ent.file) || IS_H5FD_MPIPOSIX(dataset->ent.file)))
|
||||
HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "collective access for MPIO driver only");
|
||||
|
||||
/* Set the "parallel I/O possible" flag, for H5S_find() */
|
||||
@ -3269,7 +3271,7 @@ H5D_init_storage(H5D_t *dset, const H5S_t *space)
|
||||
* If the dataset is accessed via parallel I/O, allocate file space
|
||||
* for all chunks now and initialize each chunk with the fill value.
|
||||
*/
|
||||
if (IS_H5FD_MPIO(dset->ent.file)) {
|
||||
if (IS_H5FD_MPIO(dset->ent.file) || IS_H5FD_MPIPOSIX(dset->ent.file)) {
|
||||
/* We only handle simple data spaces so far */
|
||||
int ndims;
|
||||
hsize_t dim[H5O_LAYOUT_NDIMS];
|
||||
|
@ -45,8 +45,9 @@
|
||||
#include "H5Sprivate.h" /* Dataspaces */
|
||||
#include "H5Vprivate.h"
|
||||
|
||||
/* MPIO driver needed for special checks */
|
||||
/* MPIO & MPIPOSIX drivers needed for special checks */
|
||||
#include "H5FDmpio.h"
|
||||
#include "H5FDmpiposix.h"
|
||||
|
||||
/*
|
||||
* Feature: If this constant is defined then every cache preemption and load
|
||||
@ -1781,12 +1782,12 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/*
|
||||
* If MPIO is used and file can be written to, we must bypass the
|
||||
* If MPIO or MPIPOSIX is used and file can be written to, we must bypass the
|
||||
* chunk-cache scheme because other MPI processes could be writing to
|
||||
* other elements in the same chunk.
|
||||
* Do a direct write-through of only the elements requested.
|
||||
*/
|
||||
|| (IS_H5FD_MPIO(f) && (H5F_ACC_RDWR & f->shared->flags))
|
||||
|| ((IS_H5FD_MPIO(f) ||IS_H5FD_MPIPOSIX(f)) && (H5F_ACC_RDWR & f->shared->flags))
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
) {
|
||||
H5O_layout_t l; /* temporary layout */
|
||||
@ -1965,11 +1966,11 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/*
|
||||
* If MPIO is used, must bypass the chunk-cache scheme because other
|
||||
* If MPIO or MPIPOSIX is used, must bypass the chunk-cache scheme because other
|
||||
* MPI processes could be writing to other elements in the same chunk.
|
||||
* Do a direct write-through of only the elements requested.
|
||||
*/
|
||||
|| (IS_H5FD_MPIO(f) && (H5F_ACC_RDWR & f->shared->flags))
|
||||
|| ((IS_H5FD_MPIO(f) ||IS_H5FD_MPIPOSIX(f)) && (H5F_ACC_RDWR & f->shared->flags))
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
) {
|
||||
H5O_layout_t l; /* temporary layout */
|
||||
@ -2416,10 +2417,22 @@ H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
} /* end if */
|
||||
|
||||
/* Retrieve up MPI parameters */
|
||||
if ((mpi_rank=H5FD_mpio_mpi_rank(f->shared->lf))<0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI rank");
|
||||
if ((mpi_size=H5FD_mpio_mpi_size(f->shared->lf))<0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI size");
|
||||
if(IS_H5FD_MPIO(f)) {
|
||||
if ((mpi_rank=H5FD_mpio_mpi_rank(f->shared->lf))<0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI rank");
|
||||
if ((mpi_size=H5FD_mpio_mpi_size(f->shared->lf))<0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI size");
|
||||
} /* end if */
|
||||
else {
|
||||
/* Sanity Check */
|
||||
assert(IS_H5FD_MPIPOSIX(f));
|
||||
|
||||
/* Get the MPI rank & size */
|
||||
if ((mpi_rank=H5FD_mpiposix_mpi_rank(f->shared->lf))<0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI rank");
|
||||
if ((mpi_size=H5FD_mpiposix_mpi_size(f->shared->lf))<0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI size");
|
||||
} /* end else */
|
||||
|
||||
/* Loop over all chunks */
|
||||
carry=0;
|
||||
@ -2469,8 +2482,17 @@ H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
* still writing out chunks and other processes race ahead to read
|
||||
* them in, getting bogus data.
|
||||
*/
|
||||
if (MPI_Barrier(H5FD_mpio_communicator(f->shared->lf)))
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "MPI_Barrier failed");
|
||||
if(IS_H5FD_MPIO(f)) {
|
||||
if (MPI_Barrier(H5FD_mpio_communicator(f->shared->lf)))
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "MPI_Barrier failed");
|
||||
} /* end if */
|
||||
else {
|
||||
/* Sanity Check */
|
||||
assert(IS_H5FD_MPIPOSIX(f));
|
||||
|
||||
if (MPI_Barrier(H5FD_mpiposix_communicator(f->shared->lf)))
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "MPI_Barrier failed");
|
||||
} /* end else */
|
||||
} /* end if */
|
||||
|
||||
done:
|
||||
|
67
src/H5Dseq.c
67
src/H5Dseq.c
@ -26,8 +26,9 @@
|
||||
#include "H5Pprivate.h"
|
||||
#include "H5Vprivate.h"
|
||||
|
||||
/* MPIO driver functions are needed for some special checks */
|
||||
/* MPIO & MPIPOSIX driver functions are needed for some special checks */
|
||||
#include "H5FDmpio.h"
|
||||
#include "H5FDmpiposix.h"
|
||||
|
||||
/* Interface initialization */
|
||||
#define PABLO_MASK H5Fseq_mask
|
||||
@ -182,27 +183,29 @@ H5F_seq_readv(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
{
|
||||
/* Get the transfer mode */
|
||||
H5FD_mpio_dxpl_t *dx;
|
||||
hid_t driver_id; /* VFL driver ID */
|
||||
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
/* Get the transfer mode for MPIO transfers */
|
||||
if(IS_H5FD_MPIO(f)) {
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
|
||||
/* Get the driver ID */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
|
||||
/* Get the driver ID */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
|
||||
|
||||
/* Check if we are using the MPIO driver */
|
||||
if(H5FD_MPIO==driver_id) {
|
||||
/* Get the driver information */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
|
||||
/* Check if we are using the MPIO driver (for the DXPL) */
|
||||
if(H5FD_MPIO==driver_id) {
|
||||
/* Get the driver information */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
|
||||
|
||||
/* Check if we are not using independent I/O */
|
||||
if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
|
||||
xfer_mode = dx->xfer_mode;
|
||||
/* Check if we are not using independent I/O */
|
||||
if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
|
||||
xfer_mode = dx->xfer_mode;
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
}
|
||||
|
||||
@ -564,27 +567,29 @@ H5F_seq_writev(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
{
|
||||
/* Get the transfer mode */
|
||||
H5FD_mpio_dxpl_t *dx;
|
||||
hid_t driver_id; /* VFL driver ID */
|
||||
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
/* Get the transfer mode for MPIO transfers */
|
||||
if(IS_H5FD_MPIO(f)) {
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
|
||||
/* Get the driver ID */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
|
||||
/* Get the driver ID */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
|
||||
|
||||
/* Check if we are using the MPIO driver */
|
||||
if(H5FD_MPIO==driver_id) {
|
||||
/* Get the driver information */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
|
||||
/* Check if we are using the MPIO driver (for the DXPL) */
|
||||
if(H5FD_MPIO==driver_id) {
|
||||
/* Get the driver information */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
|
||||
|
||||
/* Check if we are not using independent I/O */
|
||||
if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
|
||||
xfer_mode = dx->xfer_mode;
|
||||
/* Check if we are not using independent I/O */
|
||||
if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
|
||||
xfer_mode = dx->xfer_mode;
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "H5FDcore.h" /*temporary in-memory files */
|
||||
#include "H5FDfamily.h" /*family of files */
|
||||
#include "H5FDmpio.h" /*MPI-2 I/O */
|
||||
#include "H5FDmpiposix.h" /*MPI-2 & posix I/O */
|
||||
#include "H5FDgass.h" /*GASS I/O */
|
||||
#include "H5FDstream.h" /*in-memory files streamed via sockets */
|
||||
#include "H5FDsrb.h" /*SRB I/O */
|
||||
@ -215,7 +216,7 @@ H5F_init_interface(void)
|
||||
/* Allow MPI buf-and-file-type optimizations? */
|
||||
const char *s = HDgetenv ("HDF5_MPI_1_METAWRITE");
|
||||
if (s && HDisdigit(*s)) {
|
||||
H5_mpi_1_metawrite_g = (int)HDstrtol (s, NULL, 0);
|
||||
H5_mpiposix_1_metawrite_g = H5_mpi_1_metawrite_g = (int)HDstrtol (s, NULL, 0);
|
||||
}
|
||||
}
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
@ -304,6 +305,7 @@ H5F_init_interface(void)
|
||||
if ((status=H5FD_MULTI)<0) goto end_registration;
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
if ((status=H5FD_MPIO)<0) goto end_registration;
|
||||
if ((status=H5FD_MPIPOSIX)<0) goto end_registration;
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
#ifdef H5_HAVE_STREAM
|
||||
if ((status=H5FD_STREAM)<0) goto end_registration;
|
||||
@ -2571,7 +2573,6 @@ H5F_close(H5F_t *f)
|
||||
{
|
||||
H5F_close_degree_t fc_degree; /* What action to take when closing the last file ID for a file */
|
||||
hid_t *oid_list; /* List of IDs still open */
|
||||
unsigned oid_count; /* Number of IDs still open */
|
||||
unsigned i; /* Local index variable */
|
||||
unsigned closing=0; /* Indicate that the file will be closed */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
@ -1611,7 +1611,7 @@ H5FD_real_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
|
||||
}
|
||||
} else {
|
||||
hsize_t wasted;
|
||||
haddr_t oldeoa;
|
||||
haddr_t oldeoa=0;
|
||||
haddr_t eoa = (file->cls->get_eoa)(file);
|
||||
|
||||
#ifdef H5F_DEBUG
|
||||
|
@ -72,9 +72,9 @@ static haddr_t H5FD_mpio_get_eoa(H5FD_t *_file);
|
||||
static herr_t H5FD_mpio_set_eoa(H5FD_t *_file, haddr_t addr);
|
||||
static haddr_t H5FD_mpio_get_eof(H5FD_t *_file);
|
||||
static herr_t H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
|
||||
size_t size, void *buf);
|
||||
size_t size, void *buf);
|
||||
static herr_t H5FD_mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
|
||||
size_t size, const void *buf);
|
||||
size_t size, const void *buf);
|
||||
static herr_t H5FD_mpio_flush(H5FD_t *_file, unsigned closing);
|
||||
|
||||
/* MPIO-specific file access properties */
|
||||
|
1135
src/H5FDmpiposix.c
Normal file
1135
src/H5FDmpiposix.c
Normal file
File diff suppressed because it is too large
Load Diff
62
src/H5FDmpiposix.h
Normal file
62
src/H5FDmpiposix.h
Normal file
@ -0,0 +1,62 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
|
||||
* Thursday, July 11, 2002
|
||||
*
|
||||
* Purpose: The public header file for the mpiposix driver.
|
||||
*/
|
||||
|
||||
#ifndef __H5FDmpiposix_H
|
||||
#define __H5FDmpiposix_H
|
||||
|
||||
#include "H5FDpublic.h"
|
||||
#include "H5Ipublic.h"
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
# define H5FD_MPIPOSIX (H5FD_mpiposix_init())
|
||||
#else
|
||||
# define H5FD_MPIPOSIX (-1)
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
|
||||
/* Macros */
|
||||
|
||||
#define IS_H5FD_MPIPOSIX(f) /* (H5F_t *f) */ \
|
||||
(H5FD_MPIPOSIX==H5F_get_driver_id(f))
|
||||
|
||||
/* Function prototypes */
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
__DLL__ hid_t H5FD_mpiposix_init(void);
|
||||
__DLL__ herr_t H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm);
|
||||
__DLL__ herr_t H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/);
|
||||
__DLL__ MPI_Comm H5FD_mpiposix_communicator(H5FD_t *_file);
|
||||
__DLL__ herr_t H5FD_mpiposix_closing(H5FD_t *file);
|
||||
__DLL__ int H5FD_mpiposix_mpi_rank(H5FD_t *_file);
|
||||
__DLL__ int H5FD_mpiposix_mpi_size(H5FD_t *_file);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /*H5_HAVE_PARALLEL*/
|
||||
|
||||
#endif /* __H5FDmpiposix_H */
|
||||
|
||||
|
@ -171,27 +171,29 @@ H5F_arr_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
{
|
||||
/* Get the transfer mode */
|
||||
H5FD_mpio_dxpl_t *dx;
|
||||
hid_t driver_id; /* VFL driver ID */
|
||||
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
/* Get the transfer mode for MPIO transfers */
|
||||
if(IS_H5FD_MPIO(f)) {
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
|
||||
/* Get the driver ID */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
|
||||
/* Get the driver ID */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
|
||||
|
||||
/* Check if we are using the MPIO driver */
|
||||
if(H5FD_MPIO==driver_id) {
|
||||
/* Get the driver information */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
|
||||
/* Check if we are using the MPIO driver (for the DXPL) */
|
||||
if(H5FD_MPIO==driver_id) {
|
||||
/* Get the driver information */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
|
||||
|
||||
/* Check if we are not using independent I/O */
|
||||
if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
|
||||
xfer_mode = dx->xfer_mode;
|
||||
/* Check if we are not using independent I/O */
|
||||
if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
|
||||
xfer_mode = dx->xfer_mode;
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
}
|
||||
|
||||
@ -412,27 +414,29 @@ H5F_arr_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
{
|
||||
/* Get the transfer mode */
|
||||
H5FD_mpio_dxpl_t *dx;
|
||||
hid_t driver_id; /* VFL driver ID */
|
||||
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
/* Get the transfer mode for MPIO transfers */
|
||||
if(IS_H5FD_MPIO(f)) {
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
|
||||
/* Get the driver ID */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
|
||||
/* Get the driver ID */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
|
||||
|
||||
/* Check if we are using the MPIO driver */
|
||||
if(H5FD_MPIO==driver_id) {
|
||||
/* Get the driver information */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
|
||||
/* Check if we are using the MPIO driver (for the DXPL) */
|
||||
if(H5FD_MPIO==driver_id) {
|
||||
/* Get the driver information */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
|
||||
|
||||
/* Check if we are not using independent I/O */
|
||||
if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
|
||||
xfer_mode = dx->xfer_mode;
|
||||
/* Check if we are not using independent I/O */
|
||||
if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
|
||||
xfer_mode = dx->xfer_mode;
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
}
|
||||
|
||||
|
@ -45,8 +45,9 @@
|
||||
#include "H5Sprivate.h" /* Dataspaces */
|
||||
#include "H5Vprivate.h"
|
||||
|
||||
/* MPIO driver needed for special checks */
|
||||
/* MPIO & MPIPOSIX drivers needed for special checks */
|
||||
#include "H5FDmpio.h"
|
||||
#include "H5FDmpiposix.h"
|
||||
|
||||
/*
|
||||
* Feature: If this constant is defined then every cache preemption and load
|
||||
@ -1781,12 +1782,12 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/*
|
||||
* If MPIO is used and file can be written to, we must bypass the
|
||||
* If MPIO or MPIPOSIX is used and file can be written to, we must bypass the
|
||||
* chunk-cache scheme because other MPI processes could be writing to
|
||||
* other elements in the same chunk.
|
||||
* Do a direct write-through of only the elements requested.
|
||||
*/
|
||||
|| (IS_H5FD_MPIO(f) && (H5F_ACC_RDWR & f->shared->flags))
|
||||
|| ((IS_H5FD_MPIO(f) ||IS_H5FD_MPIPOSIX(f)) && (H5F_ACC_RDWR & f->shared->flags))
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
) {
|
||||
H5O_layout_t l; /* temporary layout */
|
||||
@ -1965,11 +1966,11 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/*
|
||||
* If MPIO is used, must bypass the chunk-cache scheme because other
|
||||
* If MPIO or MPIPOSIX is used, must bypass the chunk-cache scheme because other
|
||||
* MPI processes could be writing to other elements in the same chunk.
|
||||
* Do a direct write-through of only the elements requested.
|
||||
*/
|
||||
|| (IS_H5FD_MPIO(f) && (H5F_ACC_RDWR & f->shared->flags))
|
||||
|| ((IS_H5FD_MPIO(f) ||IS_H5FD_MPIPOSIX(f)) && (H5F_ACC_RDWR & f->shared->flags))
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
) {
|
||||
H5O_layout_t l; /* temporary layout */
|
||||
@ -2416,10 +2417,22 @@ H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
} /* end if */
|
||||
|
||||
/* Retrieve up MPI parameters */
|
||||
if ((mpi_rank=H5FD_mpio_mpi_rank(f->shared->lf))<0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI rank");
|
||||
if ((mpi_size=H5FD_mpio_mpi_size(f->shared->lf))<0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI size");
|
||||
if(IS_H5FD_MPIO(f)) {
|
||||
if ((mpi_rank=H5FD_mpio_mpi_rank(f->shared->lf))<0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI rank");
|
||||
if ((mpi_size=H5FD_mpio_mpi_size(f->shared->lf))<0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI size");
|
||||
} /* end if */
|
||||
else {
|
||||
/* Sanity Check */
|
||||
assert(IS_H5FD_MPIPOSIX(f));
|
||||
|
||||
/* Get the MPI rank & size */
|
||||
if ((mpi_rank=H5FD_mpiposix_mpi_rank(f->shared->lf))<0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI rank");
|
||||
if ((mpi_size=H5FD_mpiposix_mpi_size(f->shared->lf))<0)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI size");
|
||||
} /* end else */
|
||||
|
||||
/* Loop over all chunks */
|
||||
carry=0;
|
||||
@ -2469,8 +2482,17 @@ H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
* still writing out chunks and other processes race ahead to read
|
||||
* them in, getting bogus data.
|
||||
*/
|
||||
if (MPI_Barrier(H5FD_mpio_communicator(f->shared->lf)))
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "MPI_Barrier failed");
|
||||
if(IS_H5FD_MPIO(f)) {
|
||||
if (MPI_Barrier(H5FD_mpio_communicator(f->shared->lf)))
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "MPI_Barrier failed");
|
||||
} /* end if */
|
||||
else {
|
||||
/* Sanity Check */
|
||||
assert(IS_H5FD_MPIPOSIX(f));
|
||||
|
||||
if (MPI_Barrier(H5FD_mpiposix_communicator(f->shared->lf)))
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "MPI_Barrier failed");
|
||||
} /* end else */
|
||||
} /* end if */
|
||||
|
||||
done:
|
||||
|
@ -161,6 +161,7 @@ struct H5F_t {
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
__DLLVAR__ hbool_t H5_mpi_1_metawrite_g;
|
||||
__DLLVAR__ hbool_t H5_mpiposix_1_metawrite_g;
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
/* Private functions, not part of the publicly documented API */
|
||||
|
67
src/H5Fseq.c
67
src/H5Fseq.c
@ -26,8 +26,9 @@
|
||||
#include "H5Pprivate.h"
|
||||
#include "H5Vprivate.h"
|
||||
|
||||
/* MPIO driver functions are needed for some special checks */
|
||||
/* MPIO & MPIPOSIX driver functions are needed for some special checks */
|
||||
#include "H5FDmpio.h"
|
||||
#include "H5FDmpiposix.h"
|
||||
|
||||
/* Interface initialization */
|
||||
#define PABLO_MASK H5Fseq_mask
|
||||
@ -182,27 +183,29 @@ H5F_seq_readv(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
{
|
||||
/* Get the transfer mode */
|
||||
H5FD_mpio_dxpl_t *dx;
|
||||
hid_t driver_id; /* VFL driver ID */
|
||||
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
/* Get the transfer mode for MPIO transfers */
|
||||
if(IS_H5FD_MPIO(f)) {
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
|
||||
/* Get the driver ID */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
|
||||
/* Get the driver ID */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
|
||||
|
||||
/* Check if we are using the MPIO driver */
|
||||
if(H5FD_MPIO==driver_id) {
|
||||
/* Get the driver information */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
|
||||
/* Check if we are using the MPIO driver (for the DXPL) */
|
||||
if(H5FD_MPIO==driver_id) {
|
||||
/* Get the driver information */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
|
||||
|
||||
/* Check if we are not using independent I/O */
|
||||
if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
|
||||
xfer_mode = dx->xfer_mode;
|
||||
/* Check if we are not using independent I/O */
|
||||
if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
|
||||
xfer_mode = dx->xfer_mode;
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
}
|
||||
|
||||
@ -564,27 +567,29 @@ H5F_seq_writev(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
{
|
||||
/* Get the transfer mode */
|
||||
H5FD_mpio_dxpl_t *dx;
|
||||
hid_t driver_id; /* VFL driver ID */
|
||||
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
/* Get the transfer mode for MPIO transfers */
|
||||
if(IS_H5FD_MPIO(f)) {
|
||||
/* Get the plist structure */
|
||||
if(NULL == (plist = H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
|
||||
/* Get the driver ID */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
|
||||
/* Get the driver ID */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
|
||||
|
||||
/* Check if we are using the MPIO driver */
|
||||
if(H5FD_MPIO==driver_id) {
|
||||
/* Get the driver information */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
|
||||
/* Check if we are using the MPIO driver (for the DXPL) */
|
||||
if(H5FD_MPIO==driver_id) {
|
||||
/* Get the driver information */
|
||||
if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
|
||||
HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
|
||||
|
||||
/* Check if we are not using independent I/O */
|
||||
if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
|
||||
xfer_mode = dx->xfer_mode;
|
||||
/* Check if we are not using independent I/O */
|
||||
if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
|
||||
xfer_mode = dx->xfer_mode;
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
}
|
||||
|
||||
|
@ -20,8 +20,8 @@ CLEAN=libhdf5.settings
|
||||
|
||||
## Source and object files for the library (lexicographically)...
|
||||
LIB_SRC=H5.c H5A.c H5AC.c H5B.c H5D.c H5E.c H5F.c H5Farray.c H5Fcontig.c \
|
||||
H5Fistore.c H5Fseq.c H5FD.c H5FDsec2.c H5FDfamily.c H5FDmpio.c H5FDcore.c \
|
||||
H5FDmulti.c H5FDgass.c H5FDlog.c H5FDsrb.c H5FDstdio.c \
|
||||
H5Fistore.c H5Fseq.c H5FD.c H5FDcore.c H5FDfamily.c H5FDgass.c H5FDlog.c \
|
||||
H5FDmpio.c H5FDmpiposix.c H5FDmulti.c H5FDsec2.c H5FDsrb.c H5FDstdio.c \
|
||||
H5FDstream.c H5FL.c H5G.c H5Gent.c H5Gnode.c H5Gstab.c H5HG.c H5HL.c H5I.c \
|
||||
H5MF.c H5MM.c H5O.c H5Oattr.c H5Ocomp.c H5Ocont.c H5Odtype.c H5Oefl.c \
|
||||
H5Ofill.c H5Olayout.c H5Omtime.c H5Oname.c H5Onull.c H5Osdspace.c \
|
||||
@ -37,11 +37,11 @@ MOSTLYCLEAN=H5detect.o H5detect.lo H5detect H5Tinit.o H5Tinit.lo H5Tinit.c
|
||||
|
||||
## Public header files (to be installed)...
|
||||
PUB_HDR=H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5Dpublic.h H5Epublic.h \
|
||||
H5Fpublic.h H5FDpublic.h H5FDfamily.h H5FDgass.h H5FDmpio.h \
|
||||
H5FDlog.h H5FDsec2.h H5FDsrb.h H5FDstream.h H5FDcore.h H5FDmulti.h \
|
||||
H5FDstdio.h H5Gpublic.h H5HGpublic.h H5HLpublic.h H5Ipublic.h H5MMpublic.h \
|
||||
H5Opublic.h H5Ppublic.h H5Rpublic.h H5Spublic.h H5Tpublic.h H5Zpublic.h \
|
||||
H5pubconf.h hdf5.h H5api_adpt.h
|
||||
H5Fpublic.h H5FDpublic.h H5FDcore.h H5FDfamily.h H5FDgass.h H5FDlog.h \
|
||||
H5FDmpio.h H5FDmpiposix.h H5FDmulti.h H5FDsec2.h H5FDsrb.h H5FDstdio.h \
|
||||
H5FDstream.h H5Gpublic.h H5HGpublic.h H5HLpublic.h H5Ipublic.h \
|
||||
H5MMpublic.h H5Opublic.h H5Ppublic.h H5Rpublic.h H5Spublic.h H5Tpublic.h \
|
||||
H5Zpublic.h H5pubconf.h hdf5.h H5api_adpt.h
|
||||
|
||||
## Other header files (not to be installed)...
|
||||
PRIVATE_HDR=H5private.h H5Aprivate.h H5Apkg.h H5ACprivate.h H5Bprivate.h \
|
||||
|
13
src/hdf5.h
13
src/hdf5.h
@ -41,13 +41,14 @@
|
||||
/* Predefined file drivers */
|
||||
#include "H5FDcore.h" /* Files stored entirely in memory */
|
||||
#include "H5FDfamily.h" /* File families */
|
||||
#include "H5FDmpio.h" /* Parallel files using MPI-2 I/O */
|
||||
#include "H5FDsec2.h" /* POSIX unbuffered file I/O */
|
||||
#include "H5FDstdio.h" /* Standard C buffered I/O */
|
||||
#include "H5FDsrb.h" /* Remote access using SRB */
|
||||
#include "H5FDgass.h" /* Remote files using GASS I/O */
|
||||
#include "H5FDstream.h" /* in-memory files streamed via sockets */
|
||||
#include "H5FDmulti.h" /* Usage-partitioned file family */
|
||||
#include "H5FDlog.h" /* sec2 driver with I/O logging (for debugging) */
|
||||
#include "H5FDmpio.h" /* Parallel files using MPI-2 I/O */
|
||||
#include "H5FDmpiposix.h" /* Parallel files using combination MPI-2 & posix I/O */
|
||||
#include "H5FDmulti.h" /* Usage-partitioned file family */
|
||||
#include "H5FDsec2.h" /* POSIX unbuffered file I/O */
|
||||
#include "H5FDsrb.h" /* Remote access using SRB */
|
||||
#include "H5FDstdio.h" /* Standard C buffered I/O */
|
||||
#include "H5FDstream.h" /* In-memory files streamed via sockets */
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user