HPL_pdpanrlT(3)

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

✨ HPL_pdpanrlT β€” bestie edition ✨

okay so this is a page from the HPL Library Functions manual, section 3, and it's all about HPL_pdpanrlT. no cap, this one's a banger. buckle up πŸŽ€


🌸 NAME 🌸

HPL_pdpanrlT β€” right-looking panel factorization. that's the whole vibe. πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

#include "hpl.h"

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

πŸ’– DESCRIPTION πŸ’–

so bestie, what this function does is it factorizes a panel of columns β€” and that panel is a sub-array of a bigger one-dimensional panel A β€” using the Right-looking variant of the usual one-dimensional algorithm. and listen: the lower triangular N0-by-N0 upper block of the panel is stored in transpose form. iconic behavior, honestly. ✨

it uses bi-directional exchange to do the swap::broadcast operations all at once for one column in the panel. the way that this gives you a lower number of slightly larger messages than usual?? yeah. ate. 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. the recursive algorithm literally allows you to almost achieve Level 3 BLAS performance in the panel factorization. obsessed. 🫢

on a large number of modern machines though, this operation is latency bound β€” meaning its cost can be estimated by only the latency portion N0 * log_2(P) * lat. and heads up: mono-directional links will double this communication cost. πŸ’€

ngl, 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 allows you to bring the current column only once through cache at each step. ✨

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 has been suggested to us by Fred Gustavson, IBM T.J. Watson Research Center. shoutout king πŸ‘‘


🌈 ARGUMENTS 🌈

  • PANEL (local input/output) β€” HPL_T_panel *. on entry, PANEL points to the data structure containing the panel information.
  • 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.
  • WORK (local workspace) β€” double *. on entry, WORK is a workarray of size at least 2*(4+2*N0).

πŸŽ€ SEE ALSO πŸŽ€

the whole friend group fr fr πŸ’œ

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

that's the whole page bestie, go forth and factorize responsibly 🌸✨

HPL 2.2 Β· February 24, 2016 β€” mwah, xoxo, bye πŸ’…πŸ¦‹

πŸ“¦ where this page comes from