HPL_pdrpanllT(3)

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

πŸ’– HPL_pdrpanllT β€” the it-girl of panel factorization πŸ’–

okay so bestie, welcome to HPL_pdrpanllT(3), one of the HPL Library Functions. pull up a chair, grab a boba, we're doing linear algebra πŸ’…


✨ NAME ✨

HPL_pdrpanllT β€” Left-looking recursive panel factorization. she's recursive, she's left-looking, she factorizes panels. main character energy fr fr 🌸


πŸ¦‹ SYNOPSIS πŸ¦‹

#include "hpl.h"

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

that's it, that's the whole signature, no cap ✨


πŸ‘‘ DESCRIPTION πŸ‘‘

okay so here's the tea πŸ“ β€” HPL_pdrpanllT recursively factorizes a panel of columns using the recursive Left-looking variant of the one-dimensional algorithm. and the lower triangular N0-by-N0 upper block of the panel is stored in transpose form. (yes bestie, "lower triangular upper block", that's just what it's called, i don't make the rules 😭)

bi-directional exchange is used to perform the swap::broadcast operations at once for one column in the panel. the way that this slays is it results in a lower number of slightly larger messages than usual. iconic behavior honestly 🫢

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. πŸ’€ math math math but she's cute about it

the recursive algorithm allows indeed to almost achieve Level 3 BLAS performance in the panel factorization. lowkey obsessed.

⚠️ but bestie, hear me β€” 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. and mono-directional links will double this communication cost. not me warning you about double the pain πŸ™ˆ

🌈 ARGUMENTS 🌈

  • PANEL (local input/output) β€” HPL_T_panel * on entry, PANEL points to the data structure containing the panel information. she's the whole vibe check, everything lives in here πŸ’œ
  • M (local input) β€” const int on entry, M specifies the local number of rows of sub(A). how tall is she πŸ“
  • N (local input) β€” const int on entry, N specifies the local number of columns of sub(A). how wide is she πŸ“
  • ICOFF (global input) β€” const int on entry, ICOFF specifies the row and column offset of sub(A) in A. where she sits in the bigger picture, iykyk πŸŽ€
  • WORK (local workspace) β€” double * on entry, WORK is a workarray of size at least 2*(4+2*N0). yes the size matters, don't be messy about it ✨

⭐ SEE ALSO ⭐

the whole friend group, go say hi, they're all iconic πŸ’…

  • 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_pdrpancrT (3)
  • HPL_pdrpanllN (3)
  • HPL_pdrpanrlN (3)
  • HPL_pdrpanrlT (3)
  • HPL_pdfact (3)

HPL 2.2 🌸 February 24, 2016 β€” that's the version and the date bestie, and this page was literally the HPL_pdrpanllT(3) manual page, mwah πŸ’– periodt, go factorize some panels, you got this 🧚

πŸ“¦ where this page comes from