# Name

HPL_logsort Sort the processes in logarithmic order.

# Synopsis

`#include "hpl.h"`
`void` `HPL_logsort(` `const int` `NPROCS`, `const int` `ICURROC`, `int *` `IPLEN`, `int *` `IPMAP`, `int *` `IPMAPM1` `);`

# Description

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.

# Arguments

    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[0] 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[1] - IPLEN[0],  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)

# See Also

HPL_plindx1, HPL_plindx10, HPL_pdlaswp01N, HPL_pdlaswp01T.