summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRobert Kim Yates <rkyates@llnl.gov>1998-08-17 15:15:19 (GMT)
committerRobert Kim Yates <rkyates@llnl.gov>1998-08-17 15:15:19 (GMT)
commit8ed18c9e73733939216251e1d154b18e7d34bad3 (patch)
tree933d65a6dbac2ff4d238093d8fec65607c69f911 /src
parent05db4b09cd1710e76f50115e5f5ff0691e65215d (diff)
downloadhdf5-8ed18c9e73733939216251e1d154b18e7d34bad3.zip
hdf5-8ed18c9e73733939216251e1d154b18e7d34bad3.tar.gz
hdf5-8ed18c9e73733939216251e1d154b18e7d34bad3.tar.bz2
[svn-r598] Added code to convert HDF dataspace selections to MPI datatypes.
Diffstat (limited to 'src')
-rw-r--r--src/H5Fprivate.h13
-rw-r--r--src/H5Sprivate.h40
2 files changed, 48 insertions, 5 deletions
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index b230b06..1dba61c 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -269,8 +269,15 @@ typedef struct H5F_access_t {
#ifdef HAVE_PARALLEL
/* Properties for parallel I/O */
struct {
- MPI_Comm comm; /* communicator for file access */
- MPI_Info info; /* optional info for MPI-IO */
+ MPI_Comm comm; /* communicator for file access */
+ MPI_Info info; /* optional info for MPI-IO */
+ MPI_Datatype btype; /* buffer type for xfers */
+ MPI_Datatype ftype; /* file type for xfers */
+ haddr_t disp; /* displacement for set_view in xfers */
+ int use_types; /* if !0, use btype, ftype, disp. */
+ /* otherwise do simple byteblk xfer */
+ int old_use_types; /* remember value of use_types */
+ /* from last xfer */
} mpio;
#endif
@@ -303,6 +310,8 @@ typedef struct H5MF_free_t {
/*
* Define the low-level file interface.
*/
+/* rky 980816 Removed const modifier from access params for read and write,
+ * because H5F_mpio_read and H5F_mpio_write alter some fields therein. */
typedef struct H5F_low_class_t {
hbool_t (*access)(const char *name, const H5F_access_t *access_parms,
int mode, H5F_search_t *key/*out*/);
diff --git a/src/H5Sprivate.h b/src/H5Sprivate.h
index 7969822..1e2ca6f 100644
--- a/src/H5Sprivate.h
+++ b/src/H5Sprivate.h
@@ -90,7 +90,7 @@ typedef struct {
H5S_hyper_node_t *node; /* Boundary's node */
} H5S_hyper_bound_t;
-/* Information about hyperslab selection */
+/* Information about hyperslab list */
typedef struct {
size_t count; /* Number of nodes in list */
H5S_hyper_node_t *head; /* Pointer to head of hyperslab list */
@@ -98,6 +98,24 @@ typedef struct {
H5S_hyper_bound_t **hi_bounds; /* Upper (farthest from the origin) bound array for each dimension */
} H5S_hyper_list_t;
+/* Information about one dimension in a hyperslab selection */
+typedef struct {
+ hssize_t start;
+ hsize_t stride;
+ hsize_t count;
+ hsize_t block;
+} H5S_hyper_dim_t;
+
+/* Information about hyperslab selection */
+typedef struct {
+ H5S_hyper_dim_t *diminfo; /* ->[rank] of per-dim selection info */
+ /* diminfo only points to one array, which holds the information
+ * for one hyperslab selection. Perhaps this might need to be
+ * expanded into a list of arrays when the H5Sselect_hyperslab's
+ * restriction to H5S_SELECT_SET is removed. */
+ H5S_hyper_list_t *hyper_lst; /* List of selected hyperslabs (order is not important) */
+} H5S_hyper_sel_t;
+
/* Selection information container */
typedef struct {
H5S_sel_type type; /* Type of selection (list of points or hyperslabs) */
@@ -105,8 +123,8 @@ typedef struct {
hsize_t *order; /* Selection order. (NULL means a specific ordering of points) */
hsize_t num_elem; /* Number of elements in selection */
union {
- H5S_pnt_list_t *pnt_lst; /* List of selected points (order is important) */
- H5S_hyper_list_t *hyper_lst; /* List of selected hyperslabs (order is not important) */
+ H5S_pnt_list_t *pnt_lst; /* List of selected points (order is important) */
+ H5S_hyper_sel_t hyper; /* Info about hyperslab selections */
} sel_info;
} H5S_select_t;
@@ -307,4 +325,20 @@ int H5S_hyper_compare_bounds (const void *r1, const void *r2);
herr_t H5S_hyper_copy (H5S_t *dst, const H5S_t *src);
hbool_t H5S_hyper_select_valid (const H5S_t *space);
+#ifdef HAVE_PARALLEL
+ /* MPI-IO function to read directly from app buffer to file rky980813 */
+ herr_t H5S_mpio_spaces_read (H5F_t *f, const struct H5O_layout_t *layout,
+ const struct H5O_pline_t *pline,
+ const struct H5O_efl_t *efl, size_t elmt_size,
+ const H5S_t *file_space, const H5S_t *mem_space,
+ const H5D_transfer_t xfer_mode, void *buf/*out*/);
+
+ /* MPI-IO function to write directly from app buffer to file rky980813 */
+ herr_t H5S_mpio_spaces_write(H5F_t *f, const struct H5O_layout_t *layout,
+ const struct H5O_pline_t *pline,
+ const struct H5O_efl_t *efl, size_t elmt_size,
+ const H5S_t *file_space, const H5S_t *mem_space,
+ const H5D_transfer_t xfer_mode, const void *buf);
+#endif
+
#endif