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.