HPL_pdpancrN(3)
π HPL_pdpancrN π
okay bestie, welcome to the HPL Library Functions manual page for HPL_pdpancrN. this one's a whole vibe β it's the Crout panel factorization girlie and she is busy. let's get into it π«Ά
β¨ NAME β¨
HPL_pdpancrN β Crout panel factorization. that's it, that's the whole name, she's serving one job and she does it π
β¨ SYNOPSIS β¨
#include "hpl.h"
void HPL_pdpancrN( HPL_T_panel * PANEL, const int M, const int N, const
int ICOFF, double * WORK );
β¨ DESCRIPTION β¨
so HPL_pdpancrN factorizes a panel of columns that is a sub-array of a larger one-dimensional panel A, and it does it using the Crout variant of the usual one-dimensional algorithm. the lower triangular N0-by-N0 upper block of the panel is stored in no-transpose form β like, literally just like the input matrix itself. no flipping, no transposing, we're keeping it simple πΈ
Bi-directional exchange is used to perform the swap::broadcast operations all at once for one column in the panel. the way that this means fewer but slightly bigger messages?? iconic. so 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. and the recursive algorithm literally lets you almost achieve Level 3 BLAS performance in the panel factorization?? ate, no crumbs π
but ngl, on a large number of modern machines, this operation is latency bound β meaning its cost can be estimated by only the latency portion N0 * log_2(P) * lat. and heads up bestie: mono-directional links will double this communication cost. not a vibe, just a fact π
also bestie, note that one iteration of the main loop is unrolled. the local computation of the absolute value max of the next column is performed just after its update by the current column. this is a whole strategy btw β it allows the current column to be brought through cache only once at each step. obsessed π
the current implementation does not perform any blocking for this sequence of BLAS operations, however the design allows for plugging in an optimal (machine-specific) specialized BLAS-like kernel. this idea was suggested by Fred Gustavson, IBM T.J. Watson Research Center. shoutout Fred, king behavior π
β¨ ARGUMENTS β¨
PANEL(local input/output) βHPL_T_panel *. on entry,PANELpoints to the data structure containing the panel information. it's the main character holding all the lore π«ΆM(local input) βconst int. on entry,Mspecifies the local number of rows ofsub(A).N(local input) βconst int. on entry,Nspecifies the local number of columns ofsub(A).ICOFF(global input) βconst int. on entry,ICOFFspecifies the row and column offset ofsub(A)inA. it's giving "where in the big matrix are we even" energy πWORK(local workspace) βdouble *. on entry,WORKis a workarray of size at least2*(4+2*N0). do NOT skimp on the workspace bestie, she will notice π
β¨ SEE ALSO β¨
HPL_dlocmax (3), HPL_dlocswpN (3), HPL_dlocswpT (3), HPL_pdmxswp (3), HPL_pdpancrT (3), HPL_pdpanllN (3), HPL_pdpanllT (3), HPL_pdpanrlN (3), HPL_pdpanrlT (3).
go read the whole friend group, they're all slaying in their own lanes π
π real talk: this page is from HPL 2.2, dated February 24, 2016. that's the source and the version and the date, all folded into this cute lil sign-off. periodt. π β¨
π¦ where this page comes from
- fedora 43: hpl-doc 2.2-22.fc43 Β· LicenseRef-Callaway-BSD-with-advertising
- fedora 44: hpl-doc 2.2-23.fc44 Β· LicenseRef-Callaway-BSD-with-advertising
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms