HPL_pdrpanrlN(3)

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

✨ HPL_pdrpanrlN ✨

okay bestie, so this is a page from the HPL Library Functions manual β€” HPL being the High-Performance Linpack vibe, and this function? it's giving right-looking recursive panel factorization energy. πŸ’…


🌸 NAME 🌸

HPL_pdrpanrlN β€” right-looking recursive panel factorization. yes, that's the whole name, and yes, it slays.


πŸ¦‹ SYNOPSIS πŸ¦‹

#include "hpl.h"

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

like, that's the whole signature, no notes. 🫢


πŸ’– DESCRIPTION πŸ’–

so HPL_pdrpanrlN recursively factorizes a panel of columns using the recursive Right-looking variant of the one-dimensional algorithm. periodt.

the lower triangular N0-by-N0 upper block of the panel is stored in no-transpose form β€” meaning, bestie, it's stored just like the input matrix itself. no flipping, no tricks, just vibes. πŸŽ€

Bi-directional exchange is used to perform the swap::broadcast operations all at once for one column in the panel. this results in a lower number of slightly larger messages than usual (efficiency era, honestly). on P processes, and assuming bi-directional links, the running time of this function can be approximated by this lil formula β€” and note it's for when N is equal to N0:

N0 * log_2( P ) * ( lat + ( 2*N0 + 4 ) / bdwth ) +
N0^2 * ( M - N0/3 ) * gam2-3

where, real quick, let's break it down:

  • 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
  • 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

and listen β€” mono-directional links will double this communication cost. so like, get bi-directional links, iykyk. 😭


🌈 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 of this whole operation, fr fr.
  • 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 the lil coordinate situation. πŸ“
  • WORK (local workspace) β€” double * on entry, WORK is a workarray of size at least 2*(4+2*N0). don't skimp on it, bestie, it needs that space. 🫢

πŸŽ€ 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_pdrpanllN (3)
  • HPL_pdrpanllT (3)
  • HPL_pdrpanrlT (3)
  • HPL_pdfact (3)

πŸ’– and that's the page, bestie πŸ’–

this one's from HPL 2.2, dated February 24, 2016 β€” yeah, she's a classic, an icon, a legend, and she ate. πŸ’…βœ¨ bye pookie, go factor some panels πŸ¦‹πŸŒΈ

πŸ“¦ where this page comes from