missing set file property functions implemented, bugfixes

This commit is contained in:
2013-10-10 17:08:32 +02:00
parent d15993ecdc
commit 89bb9ef48c
15 changed files with 252 additions and 133 deletions
+8 -10
View File
@@ -30,9 +30,9 @@ h5_add_attachment (
h5_file_p f = (h5_file_p)f_;
H5_CORE_API_ENTER (h5_err_t, "f=%p, fname='%s'", f, fname);
// allowed file modes: O_RDWR, O_WRONLY; O_APPEND
if (f->props->mode == H5_O_RDONLY) {
if (f->props->flags & H5_O_RDONLY) {
H5_PRIV_FUNC_LEAVE (
h5priv_handle_file_mode_error (f->props->mode));
h5priv_handle_file_mode_error (f->props->flags));
}
struct stat st;
@@ -86,11 +86,9 @@ h5_add_attachment (
TRY (loc_id = h5priv_open_group (1, f->file, H5_ATTACHMENT));
h5_err_t exists;
TRY (exists = hdf5_link_exists (loc_id, fname));
if (exists && (f->props->mode == H5_O_RDWR || f->props->mode == H5_O_WRONLY)) {
// remove
} else if (exists && f->props->mode == H5_O_APPEND) {
if (exists && (f->props->flags & H5_O_APPENDONLY)) {
H5_PRIV_FUNC_LEAVE (
h5priv_handle_file_mode_error (f->props->mode));
h5priv_handle_file_mode_error (f->props->flags));
}
hid_t diskspace_id;
TRY (diskspace_id = hdf5_create_dataspace (1, &fsize, &fsize));
@@ -227,18 +225,18 @@ h5_get_attachment (
H5_CORE_API_ENTER (h5_err_t, "f=%p, fname='%s'", f, fname);
// allowed modes: O_RDWR, O_RDONLY; O_APPEND
// forbidden modes: O_WRONLY
if (f->props->mode == H5_O_WRONLY) {
if (f->props->flags & H5_O_WRONLY) {
H5_PRIV_FUNC_LEAVE (
h5priv_handle_file_mode_error (f->props->mode));
h5priv_handle_file_mode_error (f->props->flags));
}
hid_t loc_id;
TRY (loc_id = hdf5_open_group (f->file, H5_ATTACHMENT));
h5_err_t exists;
TRY (exists = hdf5_link_exists (loc_id, fname));
if (f->props->mode == H5_O_WRONLY) {
if (f->props->flags & H5_O_WRONLY) {
H5_PRIV_FUNC_LEAVE (
h5priv_handle_file_mode_error (f->props->mode));
h5priv_handle_file_mode_error (f->props->flags));
} else if (!exists) {
H5_PRIV_FUNC_LEAVE (
h5_error (
+15 -8
View File
@@ -1,5 +1,5 @@
/*
Copyright (c) 2006-2012, The Regents of the University of California,
Copyright (c) 2006-2013, The Regents of the University of California,
through Lawrence Berkeley National Laboratory (subject to receipt of any
required approvals from the U.S. Dept. of Energy) and the Paul Scherrer
Institut (Switzerland). All rights reserved.
@@ -12,7 +12,7 @@
static h5_errorhandler_t h5_errhandler = h5_report_errorhandler;
h5_err_t h5_errno;
h5_int32_t h5_debug_level = 1;
h5_int32_t h5_debug_level = H5_VERBOSE_ERROR;
struct call_stack h5_call_stack;
char *h5_rfmts[] = {
@@ -44,12 +44,19 @@ char *h5_rfmts[] = {
/*!
\ingroup h5_core
\defgroup h5_core_errorhandling
TODO: this is broken by design ...
*/
const char* const H5_O_MODES[] = {
"H5_O_RDWR",
"H5_O_RDONLY",
"H5_O_WRONLY",
"H5_O_APPEND"
"unknown", // 0
"H5_O_RDWR", // 1
"H5_O_RDONLY", // 2
"unknown", // 3
"H5_O_WRONLY", // 4
"unknown", // 5
"unknown", // 6
"unknown", // 7
"H5_O_APPENDONLY"
};
/*!
@@ -71,7 +78,7 @@ h5_set_debuglevel (
const h5_id_t level /*!< debug level */
) {
if (level < 0)
h5_debug_level = (1 << 20) - 1;
h5_debug_level = ((1 << 20) - 1) & ~0x7;
else
h5_debug_level = level;
return H5_SUCCESS;
@@ -238,6 +245,6 @@ h5_verror (
va_list ap
) {
if (h5_debug_level < 1) return;
if ((h5_debug_level & 0x3) < 1) return;
h5priv_vprintf (stderr, "E", h5_call_stack.entry[0].name, fmt, ap);
}
+1 -1
View File
@@ -7,7 +7,7 @@
h5_error( \
H5_ERR_BADF, \
"Operation not permitted in mode '%s'", \
H5_O_MODES[mode_id] );
H5_O_MODES[mode_id & 0xff] );
#define HANDLE_H5_OVERFLOW_ERR( max ) \
h5_error( \
+2 -1
View File
@@ -165,7 +165,8 @@ h5_set_throttle (
) {
h5_file_p f = (h5_file_p)f_;
H5_CORE_API_ENTER (h5_err_t, "f=%p, factor=%d", f, factor);
if ( (f->props->mode & H5_VFD_MPIIO_IND) || (f->props->mode & H5_VFD_MPIPOSIX) ) {
if ( (f->props->flags & H5_VFD_MPIO_INDEPENDENT) ||
(f->props->flags & H5_VFD_MPIO_POSIX) ) {
f->props->throttle = factor;
h5_info (
"Throttling enabled with factor = %lld",
+128 -63
View File
@@ -79,27 +79,30 @@ mpi_init (
TRY (f->props->access_prop = hdf5_create_property(H5P_FILE_ACCESS));
/* select the HDF5 VFD */
if (f->props->mode & H5_VFD_MPIPOSIX) {
if ((f->props->flags & H5_VFD_MPIO_POSIX)) {
h5_info("Selecting MPI-POSIX VFD");
hbool_t use_gpfs = 0; // TODO autodetect GPFS?
TRY (hdf5_set_fapl_mpiposix_property (f->props->access_prop,
f->props->comm, use_gpfs));
} else if (f->props->mode & H5_VFD_CORE) {
} else if ((f->props->flags & H5_VFD_CORE)) {
h5_info("Selecting CORE VFD");
TRY (hdf5_set_fapl_core (f->props->access_prop,
f->props->align, 1));
} else {
h5_info("Selecting MPI-IO VFD");
}
else if ((f->props->flags & H5_VFD_MPIO_INDEPENDENT)){
h5_info("Selecting MPI-IO VFD, using independent mode");
TRY (hdf5_set_fapl_mpio_property (f->props->access_prop,
f->props->comm, MPI_INFO_NULL));
if (f->props->mode & H5_VFD_MPIIO_IND) {
h5_info("MPI-IO: Using independent mode");
} else {
h5_info("MPI-IO: Using collective mode");
TRY (hdf5_set_dxpl_mpio_property (f->props->xfer_prop,
H5FD_MPIO_COLLECTIVE) );
}
TRY (hdf5_set_dxpl_mpio_property (f->props->xfer_prop,
H5FD_MPIO_INDEPENDENT) );
} else {
// default is MPI-IO colloctive mode
h5_info("Selecting MPI-IO VFD, using collective mode");
TRY (hdf5_set_fapl_mpio_property (f->props->access_prop,
f->props->comm, MPI_INFO_NULL));
TRY (hdf5_set_dxpl_mpio_property (f->props->xfer_prop,
H5FD_MPIO_COLLECTIVE) );
}
#ifdef H5_USE_LUSTRE
if (f->flags & H5_FS_LUSTRE) {
@@ -134,85 +137,145 @@ set_alignment (
static inline h5_err_t
set_default_file_props (
h5_prop_file_t* props
h5_prop_file_t* _props
) {
H5_INLINE_FUNC_ENTER (h5_err_t);
h5_prop_file_t* file_props = (h5_prop_file_t*)props;
bzero (file_props, sizeof (file_props));
file_props->class = H5_PROP_FILE;
TRY (file_props->prefix_step_name = h5_calloc (1, H5_STEPNAME_LEN));
h5_prop_file_p props = (h5_prop_file_p)_props;
bzero (props, sizeof (props));
props->class = H5_PROP_FILE;
TRY (props->prefix_step_name = h5_calloc (1, H5_STEPNAME_LEN));
strncpy (
file_props->prefix_step_name,
props->prefix_step_name,
H5_STEPNAME,
H5_STEPNAME_LEN - 1);
file_props->width_step_idx = H5_STEPWIDTH;
#ifdef PARALLEL_IO
file_props->comm = MPI_COMM_WORLD;
#endif
props->width_step_idx = H5_STEPWIDTH;
props->comm = MPI_COMM_WORLD;
H5_INLINE_FUNC_RETURN (H5_SUCCESS);
}
h5_err_t
h5_set_prop_file_mpio (
h5_prop_t _prop,
h5_set_prop_file_mpio_collective (
h5_prop_t _props,
MPI_Comm* comm
) {
h5_prop_p prop = (h5_prop_p)_prop;
H5_CORE_API_ENTER (h5_err_t, "prop=%p, comm=%p", prop, comm);
h5_prop_file_p props = (h5_prop_file_p)_props;
H5_CORE_API_ENTER (h5_err_t, "props=%p, comm=%p", props, comm);
if (prop->class != H5_PROP_FILE) {
if (props->class != H5_PROP_FILE) {
H5_INLINE_FUNC_LEAVE (
h5_error (
H5_ERR_INVAL,
"Invalid property class: %lld",
(long long int)prop->class));
(long long int)props->class));
}
h5_prop_file_t* file_prop = (h5_prop_file_t*)prop;
file_prop->comm = *comm;
props->flags &= ~(H5_VFD_MPIO_POSIX | H5_VFD_MPIO_INDEPENDENT | H5_VFD_CORE);
props->flags |= H5_VFD_MPIO_COLLECTIVE;
props->comm = *comm;
H5_CORE_API_RETURN (H5_SUCCESS);
}
h5_err_t
h5_set_prop_file_align (
h5_prop_t _prop,
h5_int64_t align
h5_set_prop_file_mpio_independent (
h5_prop_t _props,
MPI_Comm* comm
) {
h5_prop_p prop = (h5_prop_p)_prop;
H5_CORE_API_ENTER (
h5_err_t,
"prop=%p, align=%lld",
prop, (long long int)align);
if (prop->class != H5_PROP_FILE) {
h5_prop_file_p props = (h5_prop_file_p)_props;
H5_CORE_API_ENTER (h5_err_t, "props=%p, comm=%p", props, comm);
if (props->class != H5_PROP_FILE) {
H5_INLINE_FUNC_LEAVE (
h5_error (
H5_ERR_INVAL,
"Invalid property class: %lld",
(long long int)prop->class));
(long long int)props->class));
}
h5_prop_file_t* file_prop = (h5_prop_file_t*)prop;
file_prop->align = align;
props->flags &= ~(H5_VFD_MPIO_COLLECTIVE | H5_VFD_MPIO_POSIX | H5_VFD_CORE);
props->flags |= H5_VFD_MPIO_INDEPENDENT;
props->comm = *comm;
H5_CORE_API_RETURN (H5_SUCCESS);
}
h5_err_t
h5_set_prop_file_mpio_posix (
h5_prop_t _props,
MPI_Comm* comm
) {
h5_prop_file_p props = (h5_prop_file_p)_props;
H5_CORE_API_ENTER (h5_err_t, "props=%p, comm=%p", props, comm);
if (props->class != H5_PROP_FILE) {
H5_INLINE_FUNC_LEAVE (
h5_error (
H5_ERR_INVAL,
"Invalid property class: %lld",
(long long int)props->class));
}
props->flags &= ~(H5_VFD_MPIO_COLLECTIVE | H5_VFD_MPIO_POSIX | H5_VFD_CORE);
props->flags |= H5_VFD_MPIO_INDEPENDENT;
props->comm = *comm;
H5_CORE_API_RETURN (H5_SUCCESS);
}
h5_err_t
h5_set_prop_file_core_vfd (
h5_prop_t _props
) {
h5_prop_file_p props = (h5_prop_file_p)_props;
H5_CORE_API_ENTER (h5_err_t, "props=%p", props);
if (props->class != H5_PROP_FILE) {
H5_INLINE_FUNC_LEAVE (
h5_error (
H5_ERR_INVAL,
"Invalid property class: %lld",
(long long int)props->class));
}
props->flags &= ~(H5_VFD_MPIO_COLLECTIVE | H5_VFD_MPIO_INDEPENDENT | H5_VFD_MPIO_POSIX);
props->flags |= H5_VFD_MPIO_INDEPENDENT;
props->comm = MPI_COMM_SELF;
H5_CORE_API_RETURN (H5_SUCCESS);
}
h5_err_t
h5_set_prop_file_align (
h5_prop_t _props,
h5_int64_t align
) {
h5_prop_file_p props = (h5_prop_file_p)_props;
H5_CORE_API_ENTER (
h5_err_t,
"props=%p, align=%lld",
props, (long long int)align);
if (props->class != H5_PROP_FILE) {
H5_INLINE_FUNC_LEAVE (
h5_error (
H5_ERR_INVAL,
"Invalid property class: %lld",
(long long int)props->class));
}
props->align = align;
H5_CORE_API_RETURN (H5_SUCCESS);
}
h5_err_t
h5_set_prop_file_throttle (
h5_prop_t _prop,
h5_prop_t _props,
h5_int64_t throttle
) {
h5_prop_p prop = (h5_prop_p)_prop;
h5_prop_file_p props = (h5_prop_file_p)_props;
H5_CORE_API_ENTER (
h5_err_t,
"prop=%p, throttle=%lld",
prop, (long long int)throttle);
if (prop->class != H5_PROP_FILE) {
"props=%p, throttle=%lld",
props, (long long int)throttle);
if (props->class != H5_PROP_FILE) {
H5_INLINE_FUNC_LEAVE (
h5_error (
H5_ERR_INVAL,
"Invalid property class: %lld",
(long long int)prop->class));
(long long int)props->class));
}
h5_prop_file_t* file_prop = (h5_prop_file_t*)prop;
file_prop->throttle = throttle;
props->throttle = throttle;
H5_CORE_API_RETURN (H5_SUCCESS);
}
@@ -272,7 +335,7 @@ open_file (
H5_INLINE_FUNC_ENTER (h5_err_t);
h5_info ("Opening file %s.", filename);
f->props->mode = mode;
f->props->flags |= mode;
f->nprocs = 1; // queried later
f->myproc = 0; // queried later
@@ -292,19 +355,21 @@ open_file (
TRY (mpi_init (f)); // noop if serial
TRY (set_alignment (f));
if (f->props->mode & H5_O_RDONLY) {
if (f->props->flags & H5_O_RDONLY) {
f->file = H5Fopen (filename, H5F_ACC_RDONLY, f->props->access_prop);
}
else if (f->props->mode & H5_O_WRONLY){
f->file = H5Fcreate (filename, H5F_ACC_TRUNC, f->props->create_prop,
f->props->access_prop);
else if (f->props->flags & H5_O_WRONLY){
f->file = H5Fcreate (
filename, H5F_ACC_TRUNC, f->props->create_prop,
f->props->access_prop);
f->empty = 1;
}
else if (f->props->mode & H5_O_APPEND || f->props->mode & H5_O_RDWR) {
else if (f->props->flags & H5_O_APPENDONLY || f->props->flags & H5_O_RDWR) {
int fd = open (filename, O_RDONLY, 0);
if ((fd == -1) && (errno == ENOENT)) {
f->file = H5Fcreate (filename, H5F_ACC_TRUNC,
f->props->create_prop, f->props->access_prop);
f->file = H5Fcreate (
filename, H5F_ACC_TRUNC,
f->props->create_prop, f->props->access_prop);
f->empty = 1;
}
else if (fd != -1) {
@@ -318,15 +383,15 @@ open_file (
h5_error (
H5_ERR_INVAL,
"Invalid file access mode '%lld'.",
(long long int)f->props->mode));
(long long int)f->props->flags & 0xff));
}
if (f->file < 0)
H5_PRIV_FUNC_LEAVE (
h5_error (
H5_ERR_HDF5,
"Cannot open file '%s' with mode '%lld'",
filename, (long long int)f->props->mode));
"Cannot open file '%s' with mode '%s'",
filename, H5_O_MODES[f->props->flags & 0xff]));
TRY (f->root_gid = hdf5_open_group (f->file, "/" ));
TRY (h5upriv_open_file (f));
@@ -362,7 +427,7 @@ h5_open_file2 (
(long long int)props->class));
}
f->props->comm = props->comm;
f->props->mode |= props->mode;
f->props->flags = props->flags;
f->props->throttle = props->throttle;
f->props->align = props->align;
@@ -395,7 +460,7 @@ h5_open_file2 (
*/
h5_file_t
h5_open_file (
h5_open_file1 (
const char* filename,
h5_int32_t mode,
MPI_Comm comm,
@@ -408,7 +473,7 @@ h5_open_file (
h5_prop_file_t* props;
h5_file_t f;
TRY (props = (h5_prop_file_t*)h5_create_prop (H5_PROP_FILE));
TRY (h5_set_prop_file_mpio ((h5_prop_t)props, &comm));
TRY (h5_set_prop_file_mpio_collective ((h5_prop_t)props, &comm));
TRY (h5_set_prop_file_align ((h5_prop_t)props, align));
TRY (f = h5_open_file2 (filename, mode, (h5_prop_t)props));
TRY (h5_close_prop ((h5_prop_t)props));
+5 -5
View File
@@ -44,10 +44,10 @@ h5priv_write_dataset_by_name (
h5_err_t exists;
TRY (exists = hdf5_link_exists (loc_id, dsinfo->name));
if ((exists > 0) && ((f->props->mode==H5_O_WRONLY) || (f->props->mode==H5_O_APPEND))) {
if ((exists > 0) && (f->props->flags & H5_O_APPENDONLY)) {
h5_warn ("Dataset %s/%s already exist.",
hdf5_get_objname (loc_id), dsinfo->name);
H5_PRIV_API_LEAVE (h5priv_handle_file_mode_error(f->props->mode));
H5_PRIV_API_LEAVE (h5priv_handle_file_mode_error(f->props->flags));
}
/*
@@ -112,7 +112,7 @@ h5priv_write_dataset_by_name (
*/
h5_err_t
h5priv_write_dataset_by_name_id (
const h5_file_p f,
const h5_file_p f,
const hid_t loc_id,
h5_dsinfo_t* dsinfo,
hid_t dset_id,
@@ -132,10 +132,10 @@ h5priv_write_dataset_by_name_id (
h5_err_t exists;
TRY (exists = hdf5_link_exists (loc_id, dsinfo->name));
if ((exists > 0) && ((f->props->mode==H5_O_WRONLY) || (f->props->mode==H5_O_APPEND))) {
if ((exists > 0) && (f->props->flags & H5_O_APPENDONLY)) {
h5_warn ("Dataset %s/%s already exist.",
hdf5_get_objname (loc_id), dsinfo->name);
H5_PRIV_API_LEAVE (h5priv_handle_file_mode_error(f->props->mode));
H5_PRIV_API_LEAVE (h5priv_handle_file_mode_error(f->props->flags));
}
#ifdef PARALLEL_IO
+4 -8
View File
@@ -13,20 +13,16 @@
#include "h5core/h5_types.h"
#define is_writable(f) (f->props->mode != H5_O_RDONLY)
#define is_readonly(f) (f->props->mode == H5_O_RDONLY)
#define is_appendonly(f) (f->props->mode == H5_O_APPEND)
#define is_writable(f) (f->props->flags & (H5_O_RDWR | H5_O_WRONLY | H5_O_APPENDONLY))
#define is_readable(f) (f->props->flags & (H5_O_RDWR | H5_O_RDONLY))
#define is_readonly(f) (f->props->flags & H5_O_RDONLY)
#define is_appendonly(f) (f->props->flags & H5_O_APPENDONLY)
#define CHECK_WRITABLE_MODE(f) \
TRY (is_writable (f) ? H5_SUCCESS : h5_error ( \
H5_ERR_INVAL, \
"Attempting to write to read-only file"));
#define CHECK_READONLY_MODE(f) \
TRY (is_readonly (f) ? H5_SUCCESS : h5_error ( \
H5_ERR_INVAL, \
"Operation is not allowed on writable files."));
#define CHECK_TIMEGROUP(f) \
TRY ((f->step_gid > 0) ? H5_SUCCESS : h5_error ( \
H5_ERR_INVAL, \
+7 -7
View File
@@ -18,11 +18,10 @@ struct h5_prop { // generic property class
char pad[248]; // sizeof (struct h5_prop) == 256
};
typedef struct { // file property
struct h5_prop_file { // file property
h5_int64_t class; // property class == H5_PROP_FILE
h5_int64_t mode;
h5_int64_t flags;
h5_int64_t align;
h5_int64_t flags; // file access mode (read-write, readonly ...
h5_int64_t align; // HDF5 alignment
h5_int64_t throttle;
MPI_Comm comm;
hid_t xfer_prop; // dataset transfer properties
@@ -30,8 +29,9 @@ typedef struct { // file property
hid_t create_prop; // file create properties
char* prefix_step_name; // Prefix of step name
int width_step_idx; // pad step index with 0 up to this
} h5_prop_file_t;
};
typedef struct h5_prop_file h5_prop_file_t;
typedef h5_prop_file_t* h5_prop_file_p;
/**
\struct h5_file
@@ -43,7 +43,7 @@ typedef struct { // file property
*/
struct h5_file {
hid_t file; // HDF5 file id
h5_prop_file_t* props; // file properties
h5_prop_file_p props; // file properties
char empty; // flag (should be int?!)
/* MPI */
+4 -6
View File
@@ -109,10 +109,6 @@ h5u_set_num_particles (
"Invalid number particles: %lld!\n",
(long long)nparticles));
hsize_t hstride = (hsize_t)stride;
if (hstride > 1)
h5_debug ("Striding by %lld elements.", (long long)hstride);
#ifndef PARALLEL_IO
/*
if we are not using parallel-IO, there is enough information
@@ -139,8 +135,10 @@ h5u_set_num_particles (
/* we need a hyperslab selection if there is striding
* (otherwise, the default H5S_ALL selection is ok)
*/
if (hstride > 1) {
if (stride > 1) {
h5_debug ("Striding by %lld elements.", (long long)stride);
start = 0;
hsize_t hstride = (hsize_t)stride;
count = u->nparticles;
TRY (hdf5_select_hyperslab_of_dataspace (
u->memshape,
@@ -189,8 +187,8 @@ h5u_set_num_particles (
TRY( u->diskshape = hdf5_create_dataspace(1, &count, NULL) );
count = nparticles;
hstride = 1;
if (count > 0) {
hsize_t hstride = 1;
TRY( hdf5_select_hyperslab_of_dataspace(
u->diskshape,
H5S_SELECT_SET,
+1 -1
View File
@@ -230,7 +230,7 @@ h5u_write_data (
#ifdef PARALLEL_IO
TRY (h5priv_end_throttle (f));
#endif
if (f->props->mode & H5_FLUSH_STEP)
if (f->props->flags & H5_FLUSH_STEP)
TRY (hdf5_flush (f->step_gid, H5F_SCOPE_LOCAL));
TRY (hdf5_close_dataset (dset_id));
+42 -6
View File
@@ -27,13 +27,49 @@ H5CreateFileProp (
H5_API_RETURN (h5_create_prop (H5_PROP_FILE));
}
static inline h5_err_t
H5SetPropFileMPIO (
h5_prop_t prop,
MPI_Comm* comm
) {
H5_API_ENTER (h5_err_t, "prop=%p, comm=%p", (void*)prop, comm);
H5_API_RETURN (h5_set_prop_file_mpio (prop, comm));
H5_API_RETURN (h5_set_prop_file_mpio_collective (prop, comm));
}
static inline h5_err_t
H5SetPropFileMPIOCollective (
h5_prop_t prop,
MPI_Comm* comm
) {
H5_API_ENTER (h5_err_t, "prop=%p, comm=%p", (void*)prop, comm);
H5_API_RETURN (h5_set_prop_file_mpio_collective (prop, comm));
}
static inline h5_err_t
H5SetPropFileMPIOIndependent (
h5_prop_t prop,
MPI_Comm* comm
) {
H5_API_ENTER (h5_err_t, "prop=%p, comm=%p", (void*)prop, comm);
H5_API_RETURN (h5_set_prop_file_mpio_independent (prop, comm));
}
static inline h5_err_t
H5SetPropFileMPIOPosix (
h5_prop_t prop,
MPI_Comm* comm
) {
H5_API_ENTER (h5_err_t, "prop=%p, comm=%p", (void*)prop, comm);
H5_API_RETURN (h5_set_prop_file_mpio_posix (prop, comm));
}
static inline h5_err_t
H5SetPropFileCoreVFD (
h5_prop_t prop
) {
H5_API_ENTER (h5_err_t, "prop=%p", (void*)prop);
H5_API_RETURN (h5_set_prop_file_core_vfd (prop));
}
static inline h5_err_t
@@ -55,8 +91,8 @@ H5SetPropFileAlign (
use independent writes from overwhelming the underlying
parallel file system.
Throttling only works with the H5_VFD_MPIPOSIX or
H5_VFD_MPIIO_IND drivers and is only available in
Throttling only works with the H5_VFD_MPIO_POSIX or
H5_VFD_MPIO_INDEPENDENT drivers and is only available in
the parallel library.
\return \c H5_SUCCESS or \c H5_FAILURE
@@ -89,11 +125,11 @@ H5CloseProp (
File mode flags are:
- \c H5_O_RDONLY: Only reading allowed
- \c H5_O_WRONLY: create new file, dataset must not exist
- \c H5_O_APPEND: allows to append a new datasets to an existing file
- \c H5_O_APPENDONLY: allows to append new data to an existing file
- \c H5_O_RDWR: dataset may exist
- \c H5_FS_LUSTRE - enable optimizations for the Lustre file system
- \c H5_VFD_MPIPOSIX - use the HDF5 MPI-POSIX virtual file driver
- \c H5_VFD_MPIIO_IND - use MPI-IO in indepedent mode
- \c H5_VFD_MPIO_POSIX - use the HDF5 MPI-POSIX virtual file driver
- \c H5_VFD_MPIO_INDEPENDENT - use MPI-IO in indepedent mode
The typical file extension is \c .h5.
+23 -2
View File
@@ -15,6 +15,15 @@
#define UNUSED_ARGUMENT(x) (void)x
// dummy MPI calls for serial code
#if !defined (PARALLEL_IO)
#define MPI_Init(argc, argv)
#define MPI_Comm_size(comm, nprocs) { *nprocs = 1; }
#define MPI_Comm_rank(comm, myproc) { *myproc = 0; }
#define MPI_Finalize()
#define MPI_COMM_WORLD (0)
#define MPI_COMM_SELF (1)
#endif
#ifdef __cplusplus
extern "C" {
@@ -42,15 +51,27 @@ h5_set_prop_file_align (
h5_prop_t, const h5_int64_t);
h5_err_t
h5_set_prop_file_mpio (
h5_set_prop_file_mpio_collective (
h5_prop_t, MPI_Comm* const);
h5_err_t
h5_set_prop_file_mpio_independent (
h5_prop_t, MPI_Comm* const);
h5_err_t
h5_set_prop_file_mpio_posix (
h5_prop_t, MPI_Comm* const);
h5_err_t
h5_set_prop_file_core_vfd (
h5_prop_t);
h5_err_t
h5_close_prop (
h5_prop_t);
h5_file_t
h5_open_file (
h5_open_file1 (
const char*, const h5_int32_t, MPI_Comm, const h5_size_t);
h5_file_t
+1 -1
View File
@@ -32,7 +32,7 @@ extern "C" {
#define H5_DEBUG_MALLOC (1<<9)
#define H5_DEBUG_CLIB (1<<10)
#define H5_DEBUG_ALL (-1)
#define H5_DEBUG_ALL (-1 & ~0x3)
extern char* h5_rfmts[];
+2 -2
View File
@@ -246,7 +246,7 @@ h5_warn (
const char* fmt,
...
) {
if (h5_debug_level >= 2) {
if ((h5_debug_level & 0x3) >= 2) {
va_list ap;
va_start (ap, fmt);
h5priv_vprintf (stderr, "W", h5_get_funcname(), fmt, ap);
@@ -274,7 +274,7 @@ h5_info (
const char* fmt,
...
) {
if (h5_debug_level >= 3) {
if ((h5_debug_level & 0x3) == 3) {
va_list ap;
va_start (ap, fmt);
h5priv_vprintf (stdout, "I", h5_get_funcname(), fmt, ap);
+9 -12
View File
@@ -20,20 +20,20 @@ extern "C" {
/*
file modes:
H5_O_RDONLY: only reading allowed
H5_O_WRONLY: create new file, dataset must not exist
H5_O_APPEND: allows to append a new datasets to an existing file
H5_O_RDWR: dataset may exist
H5_O_RDONLY: read data from existing file
H5_O_WRONLY: create new file, if file not exists; write new or overwrite existing data
H5_O_APPENDONLY: allows to append new data to an existing file
H5_O_RDWR: create new file, if file not exists; read and (over-)write data
*/
#define H5_O_RDWR 0x00000001
#define H5_O_RDONLY 0x00000002
#define H5_O_WRONLY 0x00000004
#define H5_O_APPEND 0x00000008
#define H5_O_APPENDONLY 0x00000008
#define H5_VFD_MPIPOSIX 0x00000010
#define H5_VFD_MPIIO_IND 0x00000020
#define H5_VFD_INDEPENDENT H5_VFD_MPIIO_IND // obsolete(?)
#define H5_VFD_CORE 0x00000040
#define H5_VFD_MPIO_POSIX 0x00000010
#define H5_VFD_MPIO_INDEPENDENT 0x00000020
#define H5_VFD_MPIO_COLLECTIVE 0x00000040
#define H5_VFD_CORE 0x00000080
#define H5_FLUSH_FILE 0x00001000
#define H5_FLUSH_STEP 0x00002000
@@ -101,9 +101,6 @@ struct h5_prop;
typedef struct h5_prop* h5_prop_p;
typedef uintptr_t h5_prop_t;
struct h5_prop_file;
typedef struct h5_prop_file* h5_prop_file_p;
struct h5_file;
typedef struct h5_file* h5_file_p;
typedef uintptr_t h5_file_t;