next up previous contents
Next: Dealing with OOC index-arrays Up: The Case of OOC Previous: The Case of OOC   Contents


Dealing with OOC index-arrays and in-core data arrays


Figure: Irregular inspector in lip for OOC index arrays and in-core data arrays


Figure: Use of the lip in a simple parallel C program with in-core data array and out-of-core index array.
 MPI_Init( /* ... */ );
 LIP_Setup( /* ... */ );

 /* Generate index array describing
  * relationships between user data */

 /* Perform irregular computation
  * on the data */
 for ( /* ... */ )
 {
 /* read i-section's indices 
  * from a file */

 /* Inspector Phase (computes 
  * optimized communication 
  * pattern) */
  LIP_Localize(schedule,... );

    /* Executor Phase (performs 
     * communication and computation) */

    /* gather non-local irregular data */
    LIP_Gather(schedule,... );

    /* perform computation on data */
    for ( i = /* ... */ )
    {
      k = edge[i];
      y[k] = f( x[k] );
    }

    /* scatterer non-local
     * irregular data (results) */
    LIP_Scatter(schedule,... );
  }

  LIP_Exit( /* ... */ );
  MPI_Finalize( /* ... */ );


The pseudocode in Fig. [*] shows the use of lip for OOC index arrays and in-core index arrays. Thanks to the introduction of the concept of in-core section, the Inspector/Executor approach remains almost unaltered. The whole index array is stored in a file and only a small part of it - i-section - is loaded into main memory to enable the previously described optimization. This is illustrated in Fig. [*]. This step is repeated for all i-sections. In this way, the technique successfully used for irregular in-core problems has been generalized for irregular OOC problems with in-core data arrays and OOC index arrays.

next up previous contents
Next: Dealing with OOC index-arrays Up: The Case of OOC Previous: The Case of OOC   Contents
Created by Katarzyna Zając