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
usecoll
field of the file descriptor struct is set according to the file mode flags, but_sion_calculate_startpointers_collective
is not called and thus thecollector
andcollsize
fields of the file descriptor are not set to correct values, - in read mode,
_sion_calculate_startpointers_collective
is called (but_sion_calculate_startpointers_collective_merge
is not) so thecollector
andcollsize
fields 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 (paropen_mapped
):
-
_sion_calculate_startpointers_collective
determines 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 - e.g.
_sion_mpi_gather_process_cb
(which is used underneathsion_coll_fwrite
) determines the identity of collectors according toMPI_Comm_rank
and also -
_sion_mpi_gather_process_cb
expects collectors to receive messages fromcollsize - 1
processes with rank numbersrank_collector + 1, ..., rank_collector + collsize - 1
which cannot work in all scenarios, e.g. if there are less processes than logical files.