# Name

**HPL_pdfact** recursive panel factorization.
# Synopsis

`#include "hpl.h"`

`void`

`HPL_pdfact(`

`HPL_T_panel *`

`PANEL`

`);`

# Description

**HPL_pdfact**
recursively factorizes a 1-dimensional panel of columns.
The RPFACT function pointer specifies the recursive algorithm to be
used, either Crout, Left- or Right looking. NBMIN allows to vary the
recursive stopping criterium in terms of the number of columns in the
panel, and NDIV allow to specify the number of subpanels each panel
should be divided into. Usuallly a value of 2 will be chosen. Finally
PFACT is a function pointer specifying the non-recursive algorithm to
to be used on at most NBMIN columns. One can also choose here between
Crout, Left- or Right looking. Empirical tests seem to indicate that
values of 4 or 8 for NBMIN give the best results.
Bi-directional exchange is used to perform the swap::broadcast
operations at once for one column in the panel. This results in a
lower number of slightly larger messages than usual. On P processes
and assuming bi-directional links, the running time of this function
can be approximated by (when N is equal to N0):
N0 * log_2( P ) * ( lat + ( 2*N0 + 4 ) / bdwth ) +
N0^2 * ( M - N0/3 ) * gam2-3
where M is the local number of rows of the panel, lat and bdwth are
the latency and bandwidth of the network for double precision real
words, and gam2-3 is an estimate of the Level 2 and Level 3 BLAS
rate of execution. The recursive algorithm allows indeed to almost
achieve Level 3 BLAS performance in the panel factorization. On a
large number of modern machines, this operation is however latency
bound, meaning that its cost can be estimated by only the latency
portion N0 * log_2(P) * lat. Mono-directional links will double this
communication cost.
# Arguments

PANEL (local input/output) HPL_T_panel *
On entry, PANEL points to the data structure containing the
panel information.

# See Also

HPL_dlocmax,
HPL_dlocswpN,
HPL_dlocswpT,
HPL_pdmxswp,
HPL_pdpancrN,
HPL_pdpancrT,
HPL_pdpanllN,
HPL_pdpanllT,
HPL_pdpanrlN,
HPL_pdpanrlT,
HPL_pdrpancrN,
HPL_pdrpancrT,
HPL_pdrpanllN,
HPL_pdrpanllT,
HPL_pdrpanrlN,
HPL_pdrpanrlT.