As mentioned in section 4.3.1,
ScaLAPACK assumes a one-dimensional or
two-dimensional block-cyclic distribution
for the dense matrix computational routines.
The block-cyclic distribution is
a generalization of the block and cyclic
distributions. In one dimension, blocks
of rows of size MB or blocks of columns
of size NB are cyclically distributed
over the processes. In two dimensions,
blocks of size are
distributed cyclically over the processes.
Example programs can be found in
section 2.3 and
Appendix C.1.
According to the two-dimensional block
cyclic data distribution, scheme an M_
by N_
dense matrix is first decomposed into MB_
by NB_
blocks starting at its upper left corner.
These blocks are then uniformly distributed
in each dimension of the process grid. Thus,
every process owns a collection of blocks,
which are locally and contiguously stored
in a two-dimensional ``column major'' array.
The partitioning of a matrix into
blocks and the mapping
of these blocks onto a
process grid are shown in figure 4.6.
The local entries of every matrix
column are contiguously stored in
the processes' memories.
Figure: 4.6 A matrix decomposed into
blocks mapped onto a
process grid
The number of rows of a matrix
and the number of columns of a
matrix that a specific process
owns, denoted LOC and
LOC
respectively, may
differ from process to process
in the process grid. Likewise,
there is a local leading
dimension LLD_
for each process in the process
grid. This value may be different
on each process in the process
grid. For example, we can see
on the right of figure 4.6
that the local array stored in
process row 0 must have a local
leading dimension LLD_
greater than or equal to 5, and
greater than or equal to 4 in the
process row 1.
Table 4.8: Sizes of the local arrays
Table 4.8 gives the values of the local array sizes associated with figure 4.6.