summaryrefslogtreecommitdiffstats
path: root/src/H5Dpkg.h
diff options
context:
space:
mode:
authorMuQun Yang <ymuqun@hdfgroup.org>2005-08-11 18:48:09 (GMT)
committerMuQun Yang <ymuqun@hdfgroup.org>2005-08-11 18:48:09 (GMT)
commit870c5b2f66c158446b385cf67f507f1641aca1e2 (patch)
tree73d52b3101ef2b1a054e035710670bd5a694b48c /src/H5Dpkg.h
parent0e1b41d0fd1521784128e8637b5afa8371d2779d (diff)
downloadhdf5-870c5b2f66c158446b385cf67f507f1641aca1e2.zip
hdf5-870c5b2f66c158446b385cf67f507f1641aca1e2.tar.gz
hdf5-870c5b2f66c158446b385cf67f507f1641aca1e2.tar.bz2
[svn-r11231] Purpose:
bug fix for collective chunk IO, phase 1 Optimization hasn't been done yet, the collective chunk IO bug should be fixed. Description: In chunking storage, memory space and file space will be remapped, So to check whether file space and memory space are regular in order to use optimized MPI derived datatype for collective call one has to check per-chunk wise instead of per hyperslab wise. Even a regular memory space will be stored in span-tree and will be irregular before chunk IO. Solution: 1. Check file space and memory space per chunk wise instead of per hyperslab wise. 2. For collective IO mode, number of chunks covered by hyperslab may be different. Since we are handing per chunk per IO, for the extra chunk IO for some(not all) processors, collective mode will cause program hanged. So for the extra chunk Io mode independent IO has to be used. 3. On some platforms, Complex MPI derived datatype is not working, so we have to use independent IO for collective IO mode if the selection is irregular. However, when the selection is regular, we do want to use collective IO since that will improve performance. Special cares have to be added for this case. Platforms tested: copper(AIX 5.1) Linux(heping mpich 1.2.6), Teragrid machine, Cobalt(altix), modi4 Misc. update:
Diffstat (limited to 'src/H5Dpkg.h')
-rw-r--r--src/H5Dpkg.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/H5Dpkg.h b/src/H5Dpkg.h
index a4b4574..7b2c9e3 100644
--- a/src/H5Dpkg.h
+++ b/src/H5Dpkg.h
@@ -100,8 +100,13 @@ typedef struct H5D_io_info_t {
H5D_t *dset; /* Pointer to dataset being operated on */
const H5D_dxpl_cache_t *dxpl_cache; /* Pointer to cache DXPL info */
hid_t dxpl_id; /* Original DXPL ID */
+#ifdef H5_HAVE_PARALLEL
+ hid_t dp_dxpl_id;
+ H5D_dxpl_cache_t *dp_dxpl_cache;
+#endif
const H5D_storage_t *store; /* Dataset storage info */
H5D_io_ops_t ops; /* I/O operation function pointers */
+ H5D_io_ops_t ops_sca;
#ifdef H5S_DEBUG
H5S_iostats_t *stats; /* I/O statistics */
#endif /* H5S_DEBUG */
@@ -276,6 +281,20 @@ H5_DLL ssize_t H5D_efl_writevv(const H5D_io_info_t *io_info,
const void *buf);
#ifdef H5_HAVE_PARALLEL
+
+/* MPI-IO function to read , it will select either regular or irregular read */
+H5_DLL herr_t H5D_mpio_select_read(H5D_io_info_t *io_info,
+ size_t nelmts, size_t elmt_size,
+ const struct H5S_t *file_space, const struct H5S_t *mem_space,
+ void *buf/*out*/);
+
+/* MPI-IO function to read , it will select either regular or irregular read */
+H5_DLL herr_t H5D_mpio_select_write(H5D_io_info_t *io_info,
+ size_t nelmts, size_t elmt_size,
+ const struct H5S_t *file_space, const struct H5S_t *mem_space,
+ const void *buf);
+
+
/* MPI-IO function to read directly from app buffer to file rky980813 */
H5_DLL herr_t H5D_mpio_spaces_read(H5D_io_info_t *io_info,
size_t nelmts, size_t elmt_size,