Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementation for mpio driver with selection I/O. #3058

Closed
wants to merge 46 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
3168cae
Implementation for mpio driver with selection I/O.
vchoi-hdfgroup Jun 6, 2023
d298b10
Committing clang-format changes
github-actions[bot] Jun 6, 2023
02adecf
Correct CI errors.
vchoi-hdfgroup Jun 6, 2023
6180c41
Merge branch 'mpio_develop' of https://github.com/vchoi-hdfgroup/hdf5…
vchoi-hdfgroup Jun 6, 2023
96e11a5
Committing clang-format changes
github-actions[bot] Jun 6, 2023
e655a8f
Merge branch 'HDFGroup:develop' into mpio_develop
vchoi-hdfgroup Jun 7, 2023
045b313
Merge branch 'HDFGroup:develop' into mpio_develop
vchoi-hdfgroup Jun 8, 2023
a64ca62
Merge branch 'HDFGroup:develop' into mpio_develop
vchoi-hdfgroup Jun 10, 2023
d383ad3
Merge branch 'HDFGroup:develop' into mpio_develop
vchoi-hdfgroup Jun 13, 2023
ae4cf79
Merge branch 'HDFGroup:develop' into mpio_develop
vchoi-hdfgroup Jun 15, 2023
28d3774
Merge branch 'HDFGroup:develop' into mpio_develop
vchoi-hdfgroup Jun 18, 2023
7359426
Merge branch 'HDFGroup:develop' into mpio_develop
vchoi-hdfgroup Jun 20, 2023
7c3c746
Merge branch 'HDFGroup:develop' into mpio_develop
vchoi-hdfgroup Jun 23, 2023
9c1f825
Fix use_vector on read/write_vector() != NULL and skip_vector_cb.
vchoi-hdfgroup Jun 26, 2023
046a9eb
Committing clang-format changes
github-actions[bot] Jun 26, 2023
ec50a83
Merge branch 'HDFGroup:develop' into mpio_develop
vchoi-hdfgroup Jun 26, 2023
11e9fe6
1) Restore link_piece_collective_io() back to its original state in H…
vchoi-hdfgroup Jun 27, 2023
40e572a
Merge branch 'mpio_develop' of https://github.com/vchoi-hdfgroup/hdf5…
vchoi-hdfgroup Jun 27, 2023
5fb29a5
Committing clang-format changes
github-actions[bot] Jun 27, 2023
5bbdadd
Correct errors made for previous checkin.
vchoi-hdfgroup Jun 27, 2023
bbf78af
Merge branch 'mpio_develop' of https://github.com/vchoi-hdfgroup/hdf5…
vchoi-hdfgroup Jun 27, 2023
fbf7f47
Committing clang-format changes
github-actions[bot] Jun 27, 2023
5bb536f
Correct CI errors from running autogeh.sh.
vchoi-hdfgroup Jun 27, 2023
6a37764
Merge branch 'mpio_develop' of https://github.com/vchoi-hdfgroup/hdf5…
vchoi-hdfgroup Jun 27, 2023
564fe53
Committing clang-format changes
github-actions[bot] Jun 27, 2023
4c0fe6c
This is the fix for a failure from one of the tests in testpar/t_2Gio…
vchoi-hdfgroup Jun 27, 2023
d62be34
Merge branch 'mpio_develop' of https://github.com/vchoi-hdfgroup/hdf5…
vchoi-hdfgroup Jun 27, 2023
61df96f
Committing clang-format changes
github-actions[bot] Jun 27, 2023
081ebf6
This is the fix for the test failure from running testpar/t_pread.c
vchoi-hdfgroup Jun 27, 2023
a90f382
Committing clang-format changes
github-actions[bot] Jun 27, 2023
3a12e6c
This is the fix for a failure from dataset_writeAll() test in testpar…
vchoi-hdfgroup Jun 27, 2023
35f9fed
Merge branch 'HDFGroup:develop' into mpio_develop
vchoi-hdfgroup Jun 27, 2023
7052ecd
Fix CI errors.
vchoi-hdfgroup Jun 27, 2023
1c4d042
Merge branch 'mpio_develop' of https://github.com/vchoi-hdfgroup/hdf5…
vchoi-hdfgroup Jun 27, 2023
d03c4b1
Committing clang-format changes
github-actions[bot] Jun 27, 2023
e962b8e
Corrections to the previous fix and commit message:
vchoi-hdfgroup Jun 28, 2023
3d3b88f
Merge branch 'mpio_develop' of https://github.com/vchoi-hdfgroup/hdf5…
vchoi-hdfgroup Jun 28, 2023
9e47124
Committing clang-format changes
github-actions[bot] Jun 28, 2023
5ca9b55
Merge branch 'develop' into mpio_develop
vchoi-hdfgroup Jun 28, 2023
d34769c
Committing clang-format changes
github-actions[bot] Jun 28, 2023
48d3304
Change HDassert, HDqsort, HDfprintf to assert, qsort, and fprintf acc…
vchoi-hdfgroup Jun 28, 2023
853fed6
Committing clang-format changes
github-actions[bot] Jun 28, 2023
93cd897
Add note about HDF5_VOL_CONNECTOR to tools usage (#3159)
mattjala Jun 28, 2023
ebd95ae
Rename HDsystem() to system() (#3197)
derobins Jun 28, 2023
0e306c2
Merge branch 'develop' into mpio_develop
vchoi-hdfgroup Jun 30, 2023
1f8903d
Change HDmalloc and HDfree to malloc and free.
vchoi-hdfgroup Jun 30, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 19 additions & 18 deletions src/H5Dmpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -1637,8 +1637,27 @@ H5D__link_piece_collective_io(H5D_io_info_t *io_info, int H5_ATTR_UNUSED mpi_ran
HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code)
} /* end for */

/* Release resources */
if (chunk_mtype)
H5MM_xfree(chunk_mtype);
if (chunk_ftype)
H5MM_xfree(chunk_ftype);
if (chunk_file_disp_array)
H5MM_xfree(chunk_file_disp_array);
if (chunk_mem_disp_array)
H5MM_xfree(chunk_mem_disp_array);
if (chunk_mpi_mem_counts)
H5MM_xfree(chunk_mpi_mem_counts);
if (chunk_mpi_file_counts)
H5MM_xfree(chunk_mpi_file_counts);
if (chunk_mbt_is_derived_array)
H5MM_xfree(chunk_mbt_is_derived_array);
if (chunk_mft_is_derived_array)
H5MM_xfree(chunk_mft_is_derived_array);

/* We have a single, complicated MPI datatype for both memory & file */
mpi_buf_count = (hsize_t)1;

} /* end if */
else { /* no selection at all for this process */
ctg_store.contig.dset_addr = 0;
Expand Down Expand Up @@ -1672,24 +1691,6 @@ H5D__link_piece_collective_io(H5D_io_info_t *io_info, int H5_ATTR_UNUSED mpi_ran
ret_value);
#endif

/* Release resources */
if (chunk_mtype)
H5MM_xfree(chunk_mtype);
if (chunk_ftype)
H5MM_xfree(chunk_ftype);
if (chunk_file_disp_array)
H5MM_xfree(chunk_file_disp_array);
if (chunk_mem_disp_array)
H5MM_xfree(chunk_mem_disp_array);
if (chunk_mpi_mem_counts)
H5MM_xfree(chunk_mpi_mem_counts);
if (chunk_mpi_file_counts)
H5MM_xfree(chunk_mpi_file_counts);
if (chunk_mbt_is_derived_array)
H5MM_xfree(chunk_mbt_is_derived_array);
if (chunk_mft_is_derived_array)
H5MM_xfree(chunk_mft_is_derived_array);

/* Free the MPI buf and file types, if they were derived */
if (chunk_final_mtype_is_derived && MPI_SUCCESS != (mpi_code = MPI_Type_free(&chunk_final_mtype)))
HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code)
Expand Down
261 changes: 257 additions & 4 deletions src/H5FD.c
Original file line number Diff line number Diff line change
Expand Up @@ -1723,8 +1723,8 @@ H5FDread_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,

/* Call private function */
/* (Note compensating for base address addition in internal routine) */
if (H5FD_read_selection_id(file, type, count, mem_space_ids, file_space_ids, offsets, element_sizes,
bufs) < 0)
if (H5FD_read_selection_id(SKIP_NO_CB, file, type, count, mem_space_ids, file_space_ids, offsets,
element_sizes, bufs) < 0)
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "file selection read request failed")

done:
Expand Down Expand Up @@ -1820,14 +1820,267 @@ H5FDwrite_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count

/* Call private function */
/* (Note compensating for base address addition in internal routine) */
if (H5FD_write_selection_id(file, type, count, mem_space_ids, file_space_ids, offsets, element_sizes,
bufs) < 0)
if (H5FD_write_selection_id(SKIP_NO_CB, file, type, count, mem_space_ids, file_space_ids, offsets,
element_sizes, bufs) < 0)
HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "file selection write request failed")

done:
FUNC_LEAVE_API(ret_value)
} /* end H5FDwrite_selection() */

/*
* Translate selections to vector CB if possible, if not, scalar CB
* --skip selection CB
*/
herr_t
H5FDread_vector_from_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
hid_t mem_space_ids[], hid_t file_space_ids[], haddr_t offsets[],
size_t element_sizes[], void *bufs[] /* out */)
{
herr_t ret_value = SUCCEED; /* Return value */

FUNC_ENTER_API(FAIL)
H5TRACE9("e", "*#MtiIu*i*i*a*zx", file, type, dxpl_id, count, mem_space_ids, file_space_ids, offsets,
element_sizes, bufs);

/* Check arguments */
if (!file)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file pointer cannot be NULL")

if (!file->cls)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file class pointer cannot be NULL")

if ((!mem_space_ids) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "mem_spaces parameter can't be NULL if count is positive")

if ((!file_space_ids) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file_spaces parameter can't be NULL if count is positive")

if ((!offsets) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "offsets parameter can't be NULL if count is positive")

if ((!element_sizes) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
"element_sizes parameter can't be NULL if count is positive")

if ((!bufs) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bufs parameter can't be NULL if count is positive")

if ((count > 0) && (element_sizes[0] == 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "sizes[0] can't be 0")

if ((count > 0) && (bufs[0] == NULL))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bufs[0] can't be NULL")

/* Get the default dataset transfer property list if the user didn't provide one */
if (H5P_DEFAULT == dxpl_id) {
dxpl_id = H5P_DATASET_XFER_DEFAULT;
}
else {
if (TRUE != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list")
}

/* Call private function */
/* (Note compensating for base address addition in internal routine) */
if (H5FD_read_vector_from_selection(file, type, count, mem_space_ids, file_space_ids, offsets,
element_sizes, bufs) < 0)
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "file selection read request failed")

done:
FUNC_LEAVE_API(ret_value)
} /* end H5FDread_vector_from_selection() */

/*
* Translate selections to vector CB if possible, if not, scalar CB
* --skip selection CB
*/
herr_t
H5FDwrite_vector_from_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
hid_t mem_space_ids[], hid_t file_space_ids[], haddr_t offsets[],
size_t element_sizes[], const void *bufs[])
{
herr_t ret_value = SUCCEED; /* Return value */

FUNC_ENTER_API(FAIL)
H5TRACE9("e", "*#MtiIu*i*i*a*z**x", file, type, dxpl_id, count, mem_space_ids, file_space_ids, offsets,
element_sizes, bufs);

/* Check arguments */
if (!file)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file pointer cannot be NULL")

if (!file->cls)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file class pointer cannot be NULL")

if ((!mem_space_ids) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "mem_spaces parameter can't be NULL if count is positive")

if ((!file_space_ids) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file_spaces parameter can't be NULL if count is positive")

if ((!offsets) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "offsets parameter can't be NULL if count is positive")

if ((!element_sizes) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
"element_sizes parameter can't be NULL if count is positive")

if ((!bufs) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bufs parameter can't be NULL if count is positive")

if ((count > 0) && (element_sizes[0] == 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "sizes[0] can't be 0")

if ((count > 0) && (bufs[0] == NULL))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bufs[0] can't be NULL")

/* Get the default dataset transfer property list if the user didn't provide one */
if (H5P_DEFAULT == dxpl_id) {
dxpl_id = H5P_DATASET_XFER_DEFAULT;
}
else {
if (TRUE != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list")
}

/* Call private function */
/* (Note compensating for base address addition in internal routine) */
if (H5FD_write_vector_from_selection(file, type, count, mem_space_ids, file_space_ids, offsets,
element_sizes, bufs) < 0)
HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "file selection write request failed")

done:
FUNC_LEAVE_API(ret_value)
} /* end H5FDwrite_vector_from_selection() */

/*
* Translate selections to scalar CB
* --skip selection CB
* --skip vector CB
*/
herr_t
H5FDread_from_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count, hid_t mem_space_ids[],
hid_t file_space_ids[], haddr_t offsets[], size_t element_sizes[], void *bufs[])
{
herr_t ret_value = SUCCEED; /* Return value */

FUNC_ENTER_API(FAIL)
H5TRACE9("e", "*#MtiIu*i*i*a*z**x", file, type, dxpl_id, count, mem_space_ids, file_space_ids, offsets,
element_sizes, bufs);

/* Check arguments */
if (!file)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file pointer cannot be NULL")

if (!file->cls)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file class pointer cannot be NULL")

if ((!mem_space_ids) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "mem_spaces parameter can't be NULL if count is positive")

if ((!file_space_ids) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file_spaces parameter can't be NULL if count is positive")

if ((!offsets) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "offsets parameter can't be NULL if count is positive")

if ((!element_sizes) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
"element_sizes parameter can't be NULL if count is positive")

if ((!bufs) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bufs parameter can't be NULL if count is positive")

if ((count > 0) && (element_sizes[0] == 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "sizes[0] can't be 0")

if ((count > 0) && (bufs[0] == NULL))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bufs[0] can't be NULL")

/* Get the default dataset transfer property list if the user didn't provide one */
if (H5P_DEFAULT == dxpl_id) {
dxpl_id = H5P_DATASET_XFER_DEFAULT;
}
else {
if (TRUE != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list")
}

/* Call private function */
/* (Note compensating for base address addition in internal routine) */
if (H5FD_read_from_selection(file, type, count, mem_space_ids, file_space_ids, offsets, element_sizes,
bufs) < 0)
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "file selection read request failed")

done:
FUNC_LEAVE_API(ret_value)
} /* end H5FDread_from_selection() */

/*
* Translate selections to scalar CB
* --skip selection CB
* --skip vector CB
*/
herr_t
H5FDwrite_from_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count, hid_t mem_space_ids[],
hid_t file_space_ids[], haddr_t offsets[], size_t element_sizes[],
const void *bufs[])
{
herr_t ret_value = SUCCEED; /* Return value */

FUNC_ENTER_API(FAIL)
H5TRACE9("e", "*#MtiIu*i*i*a*z**x", file, type, dxpl_id, count, mem_space_ids, file_space_ids, offsets,
element_sizes, bufs);

/* Check arguments */
if (!file)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file pointer cannot be NULL")

if (!file->cls)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file class pointer cannot be NULL")

if ((!mem_space_ids) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "mem_spaces parameter can't be NULL if count is positive")

if ((!file_space_ids) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file_spaces parameter can't be NULL if count is positive")

if ((!offsets) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "offsets parameter can't be NULL if count is positive")

if ((!element_sizes) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
"element_sizes parameter can't be NULL if count is positive")

if ((!bufs) && (count > 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bufs parameter can't be NULL if count is positive")

if ((count > 0) && (element_sizes[0] == 0))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "sizes[0] can't be 0")

if ((count > 0) && (bufs[0] == NULL))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bufs[0] can't be NULL")

/* Get the default dataset transfer property list if the user didn't provide one */
if (H5P_DEFAULT == dxpl_id) {
dxpl_id = H5P_DATASET_XFER_DEFAULT;
}
else {
if (TRUE != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list")
}

/* Call private function */
/* (Note compensating for base address addition in internal routine) */
if (H5FD_write_from_selection(file, type, count, mem_space_ids, file_space_ids, offsets, element_sizes,
bufs) < 0)
HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "file selection write request failed")

done:
FUNC_LEAVE_API(ret_value)
} /* end H5FDwrite_from_selection() */

/*-------------------------------------------------------------------------
* Function: H5FDflush
*
Expand Down
20 changes: 16 additions & 4 deletions src/H5FDdevelop.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,12 +196,12 @@ typedef struct H5FD_class_t {
size_t sizes[], void *bufs[]);
herr_t (*write_vector)(H5FD_t *file, hid_t dxpl, uint32_t count, H5FD_mem_t types[], haddr_t addrs[],
size_t sizes[], const void *bufs[]);
herr_t (*read_selection)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, size_t count, hid_t mem_spaces[],
herr_t (*read_selection)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count, hid_t mem_spaces[],
hid_t file_spaces[], haddr_t offsets[], size_t element_sizes[],
void *bufs[] /*out*/);
herr_t (*write_selection)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, size_t count, hid_t mem_spaces[],
hid_t file_spaces[], haddr_t offsets[], size_t element_sizes[],
const void *bufs[] /*in*/);
herr_t (*write_selection)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
hid_t mem_spaces[], hid_t file_spaces[], haddr_t offsets[],
size_t element_sizes[], const void *bufs[] /*in*/);
herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
herr_t (*lock)(H5FD_t *file, hbool_t rw);
Expand Down Expand Up @@ -281,6 +281,18 @@ H5_DLL herr_t H5FDread_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
H5_DLL herr_t H5FDwrite_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
hid_t mem_spaces[], hid_t file_spaces[], haddr_t offsets[],
size_t element_sizes[], const void *bufs[]);
H5_DLL herr_t H5FDread_vector_from_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
hid_t mem_spaces[], hid_t file_spaces[], haddr_t offsets[],
size_t element_sizes[], void *bufs[] /* out */);
H5_DLL herr_t H5FDwrite_vector_from_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
hid_t mem_spaces[], hid_t file_spaces[], haddr_t offsets[],
size_t element_sizes[], const void *bufs[] /* in */);
H5_DLL herr_t H5FDread_from_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
hid_t mem_space_ids[], hid_t file_space_ids[], haddr_t offsets[],
size_t element_sizes[], void *bufs[] /* out */);
H5_DLL herr_t H5FDwrite_from_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
hid_t mem_space_ids[], hid_t file_space_ids[], haddr_t offsets[],
size_t element_sizes[], const void *bufs[] /* in */);
H5_DLL herr_t H5FDflush(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
H5_DLL herr_t H5FDtruncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
H5_DLL herr_t H5FDlock(H5FD_t *file, hbool_t rw);
Expand Down
Loading