HPL_pdmxswp(3)

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

πŸ’– HPL_pdmxswp β€” from the HPL Library Functions era πŸ’–

okay bestie, sit down, hydrate, and let's talk about HPL_pdmxswp πŸ’…

✨ NAME ✨

HPL_pdmxswp β€” swaps and broadcasts the pivot row. that's it. that's the whole vibe πŸ¦‹


✨ SYNOPSIS ✨

#include "hpl.h"

void HPL_pdmxswp( HPL_T_panel * PANEL, const int M, const int II, const
int JJ, double * WORK );

✨ DESCRIPTION ✨

so HPL_pdmxswp swaps and broadcasts the absolute value max row using bi-directional exchange. the buffer is partially set by HPL_dlocmax, okay? it's giving "someone else did the first four entries, I'll take it from here" 😭

bi-directional exchange is the whole moment here: it performs the swap::broadcast operations at once for one column in the panel. the result? a lower number of slightly larger messages than usual. iconique behavior, no cap πŸ‘‘

on P processes, and assuming bi-directional links, the running time of this function can be approximated by

log_2( P ) * ( lat + ( 2 * N0 + 4 ) / bdwth )

where lat and bdwth are the latency and bandwidth of the network for double precision real elements. communication only occurs in one process column. mono-directional links will cause the communication cost to double πŸ’€ so like, check your links bestie, fr fr.


✨ ARGUMENTS ✨

  • PANEL (local input/output) β€” HPL_T_panel *. on entry, PANEL points to the data structure containing the panel information. she's holding all the panel info, obviously πŸŽ€
  • M (local input) β€” const int. on entry, M specifies the local number of rows of the matrix column on which this function operates.
  • II (local input) β€” const int. on entry, II specifies the row offset where the column to be operated on starts with respect to the panel.
  • JJ (local input) β€” const int. on entry, JJ specifies the column offset where the column to be operated on starts with respect to the panel.
  • WORK (local workspace) β€” double *. on entry, WORK is a workarray of size at least 2 * (4+2*N0). it is assumed that HPL_dlocmax was called prior to this routine to initialize the first four entries of this array. on exit, the N0 length max row is stored in WORK[4:4+N0-1]; note that this is also the JJth row (or column) of L1. the remaining part is used as a temporary array. she's a multitasker πŸ’…
lowkey important: WORK needs that 2 * (4+2*N0) size minimum, and the first four entries come from HPL_dlocmax. don't skip that step, bestie πŸ™ˆ

✨ SEE ALSO ✨

HPL_dlocmax (3), HPL_dlocswpN (3), HPL_dlocswpT (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_pdrpanrlN (3), HPL_pdrpanrlT (3), HPL_pdfact (3). go read the whole friend group, they're all connected 🌸


mwah πŸ’‹ this was HPL 2.2, dated February 24, 2016, and that's the tea. stay parallel, stay balanced, and don't let mono-directional links ruin your week 🫢✨

πŸ“¦ where this page comes from