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.