HPL_pdrpanllN(3)

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

✨ HPL_pdrpanllN ✨

okay bestie, welcome to the HPL_pdrpanllN page from the HPL library functions manual πŸ’– this one is a whole vibe: it's the Left-looking recursive panel factorization. yes queen, we're doing linear algebra in the group chat now 🫢


🌸 NAME 🌸

HPL_pdrpanllN β€” Left-looking recursive panel factorization. that's it, that's the girl πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

#include "hpl.h"

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

πŸ‘‘ DESCRIPTION πŸ‘‘

so HPL_pdrpanllN recursively factorizes a panel of columns using the recursive Left-looking variant of the one-dimensional algorithm. lowkey iconic. ✨

the lower triangular N0-by-N0 upper block of the panel is stored in no-transpose form (i.e. just like the input matrix itself). no flipping, no transposing, we're keeping it exactly how it came in πŸŽ€

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 β€” fewer texts, bigger texts, we love efficiency fr fr πŸ’¬

on P processes, and assuming bi-directional links, the running time of this function can be approximated by this (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. okay werk πŸ‘‘

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 bestie, listen β€” Mono-directional links will double this communication cost. not a drill, that's literally double πŸ’€


πŸ’œ ARGUMENTS πŸ’œ

  • PANEL β€” (local input/output) HPL_T_panel *. on entry, PANEL points to the data structure containing the panel information. it's giving ✨the source of truth✨
  • 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. like, where does the little sub-matrix live inside the big one? there. found her πŸ“
  • WORK β€” (local workspace) double *. on entry, WORK is a workarray of size at least 2*(4+2*N0). give her room to breathe, she needs it 🫢

🌈 SEE ALSO 🌈

the whole friend group, no cap:

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

and that's the page, bestie!! this one's from HPL 2.2, dated February 24, 2016 πŸŽ€ go forth and factorize those panels, you absolute main character πŸ’…βœ¨

πŸ“¦ where this page comes from