|
The idea of a new parallelizing scheme is presented in
Fig. . The respective pseudocode
is shown in Fig.
.
Since reading every element from a disk just as it becomes needed
would be very inefficient, the
optimization has to be aimed not only at efficient communication but
also at minimizing I/O accesses associated with not-in-memory data
elements. This is done by examining and translating the references to
data residing on a disk into references to the memory
buffer.
This is done by using the LIP_ooc_localize() routine
after LIP_localize() is called. The
translation process changes indices in the indirect array and in
communication schedule so they
point to the local memory buffer as shown in the Fig.
.
This process results in a data structure
called I/O buffer mapping. It is updated upon examination of
subsequent i-sections to record information about what data has to be
moved between the disk and main memory as data that are in the memory are no
longer needed for the processing of the next i-section. After the
translation process is done, the I/O buffer mapping object may be used to
create MPI derived data types to perform actual movement of data using
MPI-IO routines (like MPI_File_read and
MPI_File_write()).
Obtaining MPI datatypes is
done via a call toLIP_IObufmap_get_datatype().
In this way the irregular
problems for which all arrays are OOC may also be parallelized.
Next: Irregular distribution
Up: The Case of OOC
Previous: Dealing with OOC index-arrays
  Contents
Created by Katarzyna Zając