Collective I/O and mapped mode, (how) does it work?
_sion_paropen_mapped_generic suggests, that it is at least partially supported to open files in mapped mode for collective I/O:
- in write mode, the
usecollfield of the file descriptor struct is set according to the file mode flags, but
_sion_calculate_startpointers_collectiveis not called and thus the
collsizefields of the file descriptor are not set to correct values,
- in read mode,
_sion_calculate_startpointers_collectiveis called (but
_sion_calculate_startpointers_collective_mergeis not) so the
collsizefields are populated with values and later on broadcast to all processes.
However, it is not clear:
- whether this works at the moment (there are no tests exercising this combination),
- how this is supposed to work (see below).
Several aspects of collective I/O seem to not have been translated from the original picture (normal
paropen) to the mapped picture (
_sion_calculate_startpointers_collectivedetermines the identity of collectors (their rank) and the size of collective groups according to the number of logical files rather than the number of actual processes, but
_sion_mpi_gather_process_cb(which is used underneath
sion_coll_fwrite) determines the identity of collectors according to
_sion_mpi_gather_process_cbexpects collectors to receive messages from
collsize - 1processes with rank numbers
rank_collector + 1, ..., rank_collector + collsize - 1
which cannot work in all scenarios, e.g. if there are less processes than logical files.