Name

HPL_spreadN Spread row panel U and forward current column panel.

Synopsis

#include <hpl.h>

void HPL_spreadN( HPL_T_panel * PBCST, int * IFLAG, HPL_T_panel * PANEL, const enum HPL_SIDE SIDE, const int N, double * U, const int LDU, const int SRCDIST, const int * IPLEN, const int * IPMAP, const int * IPMAPM1 );

Description

HPL_spreadN spreads the local array containing local pieces of U, so that on exit to this function, a piece of U is contained in every process row. The array IPLEN contains the number of rows of U, that should be spread on any given process row. This function also probes for the presence of the column panel PBCST. In case of success, this panel will be forwarded. If PBCST is NULL on input, this probing mechanism will be disabled.

Arguments

PBCST   (local input/output)          HPL_T_panel *
        On entry,  PBCST  points to the data structure containing the
        panel (to be broadcast) information.
IFLAG   (local intput/output)         int *
        On entry, IFLAG  indicates  whether or not  the broadcast has
        already been completed.  If not,  probing will occur, and the
        outcome will be contained in IFLAG on exit.
PANEL   (local input/output)          HPL_T_panel *
        On entry,  PANEL  points to the data structure containing the
        panel (to be spread) information.
SIDE    (global input)                const enum HPL_SIDE
        On entry, SIDE specifies whether the local piece of U located
        in process IPMAP[SRCDIST] should be spread to the right or to
        the left. This feature is used by the equilibration process.
N       (global input)                const int
        On entry,  N  specifies  the  local number of columns of U. N
        must be at least zero.
U       (local input/output)          double *
        On entry,  U  is an array of dimension (LDU,*) containing the
        local pieces of U.
LDU     (local input)                 const int
        On entry, LDU specifies the local leading dimension of U. LDU
        should be at least MAX(1,IPLEN[nprow]).
SRCDIST (local input)                 const int
        On entry,  SRCDIST  specifies the source process that spreads
        its piece of U.
IPLEN   (global input)                const int *
        On entry, IPLEN is an array of dimension NPROW+1.  This array
        is such that IPLEN[i+1] - IPLEN[i] is the number of rows of U
        in each process before process IPMAP[i], with the  convention
        that IPLEN[nprow] is the total number of rows. In other words
        IPLEN[i+1] - IPLEN[i]  is  the local number of rows of U that
        should be moved to process IPMAP[i].
IPMAP   (global input)                const int *
        On entry, IPMAP is an array of dimension  NPROW.  This  array
        contains  the  logarithmic mapping of the processes. In other
        words, IPMAP[myrow]  is the absolute coordinate of the sorted
        process.
IPMAPM1 (global input)                const int *
        On entry,  IPMAPM1 is an array of dimension NPROW. This array
        contains  the inverse of the logarithmic mapping contained in
        IPMAP: For i in [0.. NPROW) IPMAPM1[IPMAP[i]] = i.

See Also

HPL_pdlaswp01N