HPL_logsort Sort the processes in logarithmic order.
computes an array IPMAP and its inverse IPMAPM1 that
contain the logarithmic sorted processes id with repect to the local
number of rows of U that they own. This is necessary to ensure that
the logarithmic spreading of U is optimal in terms of number of steps
and communication volume as well. In other words, the larget pieces
of U will be sent a minimal number of times.
NPROCS (global input) const int
On entry, NPROCS specifies the number of process rows in the
process grid. NPROCS is at least one.
ICURROC (global input) const int
On entry, ICURROC is the source process row.
IPLEN (global input/output) int *
On entry, IPLEN is an array of dimension NPROCS+1, such that
IPLEN is 0, and IPLEN[i] contains the number of rows of U,
that process i-1 has. On exit, IPLEN[i] is the number of
rows of U in the processes before process IPMAP[i] after the
sort, with the convention that IPLEN[NPROCS] is the total
number of rows of the panel. In other words, IPLEN[i+1] -
IPLEN[i] is the number of rows of A that should be moved to
the process IPMAP[i]. IPLEN is such that the number of rows
of the source process row is IPLEN - IPLEN, and the
remaining entries of this array are sorted so that the
quantities IPLEN[i+1]-IPLEN[i] are logarithmically sorted.
IPMAP (global output) int *
On entry, IPMAP is an array of dimension NPROCS. On exit,
array contains the logarithmic mapping of the processes. In
other words, IPMAP[myroc] is the corresponding sorted process
IPMAPM1 (global output) int *
On entry, IPMAPM1 is an array of dimension NPROCS. On exit,
this array contains the inverse of the logarithmic mapping
contained in IPMAP: IPMAPM1[ IPMAP[i] ] = i, for all i in