\begin{alltt} \small\tt
{\em a) the traditional read/write/seek interface: }
   LU\_read(array, first\_col, ncols)
   \{
       int col\_bytes = N * sizeof(float); // {\em size of a column}
       int col = first\_col;
   
       // {\em loop through the desired number of columns}
       for (i = 1 to ncols) \{
           seek((col-1) * col\_bytes);   // {\em find this column in the file}
           read(array, col\_bytes);      // {\em read one column}
   
           array += col\_nbytes;  // {\em skip to next column}
           col += P;             // {\em column cyclic}
       \}
   \}
   
{\em b) a collective interface with disk-directed I/O support:}
   LU\_read(array, first\_col, ncols)
   \{
       barrier();
   
       first\_col = min(first\_col) over all processors;
       ncols = sum(ncols) over all processors;
       
       disk-directed read of (first\_col) through (first\_col + ncols - 1);
   
       barrier();
   \}
\end{alltt}
