Most routines in the present ScaLAPACK library have alignment restrictions. Alignment restrictions are constraints in the type of distributions and the indexing into the matrix that the user may utilize when calling a particular routine. For example, some routines will not accept submatrices whose starting index is not a multiple of the physical blocking factor.
More commonly, routines require that their various operand matrices have certain alignment commonalities. For instance, the solver routines generally require that row i of the matrix A be distributed across the same process row as row i of the right hand side matrix B.
Because of their idiosyncratic nature, it is almost impossible to give a full description of the alignment restrictions inherit in the present library without doing so on a routine-specific basis. All ScaLAPACK routines provide a description of the assumed alignment restrictions in the leading comments to the routine, and at this time the user must consult the actual code to find out what restrictions exist, if any.
We are working to remove the alignment restrictions, (with the exceptions noted below) so that the user will not have to worry about alignment, save as a performance issue.
Certain fundamental restrictions about data distributions are not currently being removed the library. Examples include the fact that the operands should be block-cyclicly distributed for the dense codes and one-dimensional block distributed for the banded codes. Also included here is the restriction that all operands be distributed across the same context (process grid).
Note that the ScaLAPACK library includes a redistribution/copy routine which allows the user to explicitly move matrices across contexts. Similar routines could be provided for distributions that do not match the ones presently employed in ScaLAPACK.
Finally, we note that the current descriptor structure does not accommodate the definition of replicated vectors. A replicated vector is a vector that is distributed across a row or column within the process grid and duplicated across subsequent process rows or columns, respectively. Such vectors occur, for example, as the IPIV vector in the LU factorization and the TAU vector in QR factorizations.