HPL_pdrpancrT(3)

πŸ“¦ version 2.2, in fedora 43, fedora 44

πŸ’– HPL_pdrpancrT πŸ’–

okay bestie, welcome to the HPL Library Functions corner of the man pages, this one's literally called HPL_pdrpancrT(3) and it's giving recursive panel factorization energy, no cap 🫢


✨ NAME ✨

HPL_pdrpancrT β€” Crout recursive panel factorization. that's it, that's the whole name, slay πŸ’…


🌸 SYNOPSIS 🌸

#include "hpl.h"

void HPL_pdrpancrT( HPL_T_panel * PANEL, const int M, const int N, const
int ICOFF, double * WORK );

copy that exactly, don't get cute with it πŸ™ˆ


πŸ¦‹ DESCRIPTION πŸ¦‹

so like. HPL_pdrpancrT recursively factorizes a panel of columns using the recursive Crout variant of the usual one-dimensional algorithm. the lower triangular N0-by-N0 upper block of the panel is stored in transpose form β€” yes, transpose, that's the whole T in the name, iykyk πŸŽ€

bi-directional exchange is used to perform the swap::broadcast operations at once for one column in the panel. the way that works out is you get 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. and honestly? the recursive algorithm allows it to almost achieve Level 3 BLAS performance in the panel factorization, which is iconic fr fr πŸ‘‘

but here's the tea 😭 on a large number of modern machines, this operation is however latency bound, meaning its cost can be estimated by only the latency portion N0 * log_2(P) * lat. and mono-directional links will double this communication cost. so like, know your network bestie, it matters πŸ’€


πŸ’… ARGUMENTS πŸ’…

  • PANEL (local input/output) β€” HPL_T_panel *. on entry, PANEL points to the data structure containing the panel information. it's the main character, everything revolves around it ✨
  • M (local input) β€” const int. on entry, M specifies the local number of rows of sub(A).
  • N (local input) β€” const int. on entry, N specifies the local number of columns of sub(A).
  • ICOFF (global input) β€” const int. on entry, ICOFF specifies the row and column offset of sub(A) in A. it's giving coordinates 🧭
  • WORK (local workspace) β€” double *. on entry, WORK is a workarray of size at least 2*(4+2*N0). do not skimp on the workspace, she needs her room πŸ“

🌈 SEE ALSO 🌈

the whole friend group, go say hi 🫢

  • HPL_dlocmax (3)
  • HPL_dlocswpN (3)
  • HPL_dlocswpT (3)
  • HPL_pdmxswp (3)
  • HPL_pdpancrN (3)
  • HPL_pdpancrT (3)
  • HPL_pdpanllN (3)
  • HPL_pdpanllT (3)
  • HPL_pdpanrlN (3)
  • HPL_pdpanrlT (3)
  • HPL_pdrpancrN (3)
  • HPL_pdrpanllN (3)
  • HPL_pdrpanllT (3)
  • HPL_pdrpanrlN (3)
  • HPL_pdrpanrlT (3)
  • HPL_pdfact (3)

and that's the whole page bestie!! πŸ’–βœ¨ this lil masterpiece is from HPL 2.2, dated February 24, 2016 β€” go forth and factorize those panels, you absolute icon πŸ‘‘πŸŽ€πŸ¦‹
πŸ“¦ where this page comes from