HPL_spreadN(3)

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

πŸ’– HPL_spreadN πŸ’–

okay bestie, welcome to HPL_spreadN(3) from the HPL Library Functions lineup β€” this is the one that spreads the row panel U around and forwards the current column panel. she's a real one. ✨


🌸 NAME 🌸

HPL_spreadN β€” spread row panel U and forward current column panel.


πŸŽ€ SYNOPSIS πŸŽ€

#include "hpl.h"

void HPL_spreadN( 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 );

πŸ¦‹ DESCRIPTION πŸ¦‹

so basically, HPL_spreadN spreads the local array holding the local pieces of U, so that when this function exits, a piece of U is literally sitting in every process row. like, everybody eats. πŸ’…

the array IPLEN tells you the number of rows of U that should be spread onto any given process row. she also probes for the presence of the column panel PBCST β€” and if it's a success, that panel gets forwarded. 🫢

and if PBCST is NULL on input? then this whole probing mechanism is disabled, periodt. no probing for you.

πŸ‘‘ 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 says whether or not the broadcast has already been completed. if it hasn't, probing will occur, and the outcome lives in IFLAG on exit.
  • 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. no cap.
  • N (global input) β€” const int β€” on entry, N specifies the local number of columns of U. N must be at least zero. that's the vibe check. 😀
  • 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,IPLEN[nprow]).
  • SRCDIST (local input) β€” const int β€” on entry, SRCDIST specifies the source process that spreads its piece of U.
  • 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]. iykyk 🧚
  • 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.

🌈 SEE ALSO 🌈

HPL_pdlaswp01N (3).


that's the whole page, bestie β€” go forth and spread that panel πŸ’œ

this iconic lil manual page is from HPL 2.2, dated February 24, 2016 β€” mwah, xoxo, she ate and left no crumbs πŸ’…πŸŽ€

πŸ“¦ where this page comes from