In Section 2, we introduced the concept of encoding all information about a matrix in an object. Similarly, PLAPACK supports a number of linear algebra objects, including matrices, vectors, multivectors (a collection of vectors), and projected vectors and multivectors.
We have already discussed how vectors are distributed. Multivectors are a collection of vectors that are identically distributed. Alternatively, one can think of a multivector as a matrix with a few columns, where each column is distributed like a vector.
Many parallel linear algebra libraries view vectors as special cases of matrices, which has the consequence that they exist within on column of nodes or one row of nodes. We also include this case, but use it only for intermediate results. Thus, we view these cases of vectors as vectors that have been projected onto a row of nodes, gathering the elements of the vector within each column of nodes to the node in the desired row. Similarly, a vector can be projected onto a column by gathering the elements of the vector within each row of nodes to the node in the desired column. Similarly, multivectors can be projected.
Finally, a vector that is projected onto a row of nodes can be duplicated to all rows of nodes, created a duplicated (row) vector. This can be achieved by collecting (instead of gathering) within each column of nodes. Similarly, a duplicated projected column vector can be created. Extensions to multivectors naturally follow.
There is one additional linear algebra object, a multiscalar. A multiscalar is a scalar or matrix that is not distributed (i.e., it exists entirely within on node), although it can be duplicated to all nodes.