Retrieves local and global causes that broke collective I/O on the last parallel I/O call
H5P_GET_MPIO_NO_COLLECTIVE_CAUSE( dxpl_id, local_no_collective_cause, global_no_collective_cause )
herr_t H5Pget_mpio_no_collective_cause( hid_t dxpl_id, uint32_t * local_no_collective_cause, uint32_t * global_no_collective_cause)
|hid_t ||IN: Dataset transfer property list identifier|
|uint32_t *||OUT: An enumerated set value indicating the causes that prevented collective I/O in the local process|
|uint32_t *||OUT: An enumerated set value indicating the causes across all processes that prevented collective I/O|
A user can request collective I/O via a data transfer property list (DXPL) that has been suitably modified with H5P_SET_DXPL_MPIO. However, there are conditions that can cause HDF5 to forgo collective I/O and perform independent I/O. Such causes can be different across the processes of a parallel application. This function allows the user to determine what caused the HDF5 library to skip collective I/O locally, that is in the local process, and globally, across all processes.
H5P_GET_MPIO_NO_COLLECTIVE_CAUSE serves two purposes. It can be used to determine whether collective I/O was used for the last preceding parallel I/O call. If collective I/O was not used, the function retrieves the local and global causes that broke collective I/O on that parallel I/O call. The properties retrieved by this function are set before I/O takes place and are retained even when I/O fails.
Valid values returned in
global_no_collective_cause are as follows or, if there are multiple causes, a bitwise OR of the relevant causes; the numbers in the center column are the bitmask values:
|Collective I/O was performed successfully (Default)|
|Collective I/O was not performed because independent I/O was requested|
|Collective I/O was not performed because datatype conversions were required|
|Collective I/O was not performed because data transforms needed to be applied|
|Collective I/O was not performed because the selected file driver was MPI-POSIX|
| ||Collective I/O was not performed because one of the dataspaces was neither simple nor scalar|
|Collective I/O was not performed because there were point selections in one of the dataspaces|
| ||Collective I/O was not performed because the dataset was neither contiguous nor chunked|
|Collective I/O was not performed because filters needed to be applied|
The above name/value pairs are members of HDF5’s
Each process determines whether it can perform collective I/O and broadcasts the result. Those results are combined to make a collective decision; collective I/O will be performed only if all processes can perform collective I/O.
If collective I/O was not used, the causes that prevented it are reported by individual process by means of an enumerated set. The causes may differ among processes, so H5P_GET_MPIO_NO_COLLECTIVE_CAUSE returns two property values. The first value is the one produced by the local process to report local causes. This local information is encoded in an enumeration, the
H5D_mpio_no_collective_cause_t described above, with all individual causes combined into a single enumeration value by means of a bitwise OR operation. The second value reports global causes; this global value is the result of a bitwise-OR operation across the values returned by all the processes.
Returns a non-negative value if successful; otherwise returns a negative value.
|1.8.10||C function introduced in this release.|