From 8ed18c9e73733939216251e1d154b18e7d34bad3 Mon Sep 17 00:00:00 2001 From: Robert Kim Yates Date: Mon, 17 Aug 1998 10:15:19 -0500 Subject: [svn-r598] Added code to convert HDF dataspace selections to MPI datatypes. --- src/H5Fprivate.h | 13 +++++++++++-- src/H5Sprivate.h | 40 +++++++++++++++++++++++++++++++++++++--- 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 -- cgit v0.12