HPL_spreadT(3)

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

πŸ’– HPL_spreadT β€” bestie edition πŸ’–

okay so this is a page from the HPL Library Functions manual, and honestly? it's giving "parallel linear algebra but make it gossip". the function is called HPL_spreadT, and we're gonna spill every single detail about it, no cap. πŸ¦‹


✨ NAME ✨

HPL_spreadT β€” spread row panel U and forward current column panel. πŸŽ€

like, it takes U and it spreads it. that's the whole vibe.


🌸 SYNOPSIS 🌸

#include "hpl.h"

void HPL_spreadT( HPL_T_panel * PBCST, int * IFLAG, HPL_T_panel * PANEL,
const enum HPL_SIDE SIDE, const int N, double * U, const int LDU, const
int SRCDIST, const int * IPLEN, const int * IPMAP, const int * IPMAPM1 );

copy that exactly, bestie, don't be out here retyping it from memory πŸ’…


πŸ’« DESCRIPTION πŸ’«

so HPL_spreadT spreads the local array containing local pieces of U, so that when you exit this function, a piece of U is contained in every process row. everyone gets a lil piece. we love an equitable distribution moment. ✨

the array IPLEN contains the number of columns of U that should be spread on any given process row.

this function also probes for the presence of the column panel PBCST. if it's available, that panel will be forwarded. but β€” and this is the important bit β€” if PBCST is NULL on input, this probing mechanism will be disabled. like, off. gone. no probing. πŸ™ˆ


πŸ‘‘ ARGUMENTS πŸ‘‘

  • PBCST (local input/output) HPL_T_panel * β€” on entry, PBCST points to the data structure containing the panel (to be broadcast) information.
  • IFLAG (local input/output) int * β€” on entry, IFLAG indicates whether or not the broadcast has already been completed. if it hasn't, probing will occur, and the outcome will be contained in IFLAG on exit. so like... IFLAG goes in one way and comes out changed. character development fr fr. 🌈
  • PANEL (local input/output) HPL_T_panel * β€” on entry, PANEL points to the data structure containing the panel (to be spread) information.
  • SIDE (global input) const enum HPL_SIDE β€” on entry, SIDE specifies whether the local piece of U located in process IPMAP[SRCDIST] should be spread to the right or to the left. this feature is used by the equilibration process. pick a side, bestie. πŸ’…
  • N (global input) const int β€” on entry, N specifies the local number of rows of U. N must be at least zero. (yes, zero is allowed. negative is not. we do not do negative here.) 😀
  • U (local input/output) double * β€” on entry, U is an array of dimension (LDU,*) containing the local pieces of U.
  • LDU (local input) const int β€” on entry, LDU specifies the local leading dimension of U. LDU should be at least MAX(1,N). don't skimp on it. 🫢
  • SRCDIST (local input) const int β€” on entry, SRCDIST specifies the source process that spreads its piece of U. it's the main character of this operation, lowkey. πŸ‘‘
  • IPLEN (global input) const int * β€” on entry, IPLEN is an array of dimension NPROW+1. this array is such that IPLEN[i+1] - IPLEN[i] is the number of rows of U in each process before process IPMAP[i], with the convention that IPLEN[nprow] is the total number of rows. in other words, IPLEN[i+1] - IPLEN[i] is the local number of rows of U that should be moved to process IPMAP[i]. πŸ“
  • IPMAP (global input) const int * β€” on entry, IPMAP is an array of dimension NPROW. this array contains the logarithmic mapping of the processes. in other words, IPMAP[myrow] is the absolute coordinate of the sorted process.
  • IPMAPM1 (global input) const int * β€” on entry, IPMAPM1 is an array of dimension NPROW. this array contains the inverse of the logarithmic mapping contained in IPMAP: for i in [0.. NPROW) IPMAPM1[IPMAP[i]] = i. it's giving "undo button energy". 🧚

πŸ”₯ SEE ALSO πŸ”₯

  • HPL_pdlaswp01T (3).

⚠️ real talk: the PBCST = NULL thing disables probing entirely, and N must be at least zero. those are the vibes you can't argue with. πŸ’€

and that's the whole page, bestie β€” this one came straight out of HPL 2.2, dated February 24, 2016. iconic era honestly. now go spread that U πŸ’–βœ¨πŸ¦‹πŸŽ€πŸ’…

πŸ“¦ where this page comes from