void HPL_logsort( const int NPROCS, const int ICURROC, int * IPLEN, int * IPMAP, int * IPMAPM1 );
HPL_logsort 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 coordinate.
- 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 [0.. NPROCS)
HPL_plindx1 (3), HPL_plindx10 (3), HPL_pdlaswp01N (3), HPL_pdlaswp01T (3).