An S4 container for a distributed tall/skinny matrix.
DATA
The local submatrix.
nrows,
ncols The global matrix dimension.
The (conceptual) global (non-distributed) matrix should be distributed by row, meaning that each submatrix should own all of the columns of the global matrix. Most methods assume no other real structure, however for best performance (and for the methods which require it), one should try to organize their distributed data in a particular way.
First, adjacent MPI ranks should hold adjacent rows. So if the last row that
rank k
owns is i
, then the first row that rank k+1
owns
should be row i+1
. Additionally, any method that operates on two (or
more) shaq objects, the two shaqs should be distributed identically. By this
we mean that if the number of rows shaq A
owns on rank k
is
k_i
, then the number of rows shaq B
owns on rank k
should also be k_i
.
Finally, for best performance, one should generally try to keep the number of rows "balanced" (roughly equal) across processes, with perhaps the last "few" having one less row than the others.