PZLAUUM(l)
β¨ NAME β¨
PZLAUUM β okay so bestie, this one π
computes the product U * U' or L' * L, where the triangular factor U or L is stored in the upper or lower triangular part of the distributed matrix sub( A ) = A(IA:IA+N-1,JA:JA+N-1).
Also it's a LAPACK auxiliary routine, that's the (l) up in PZLAUUM(l) β we are so in our LAPACK era rn π«Ά
πΈ SYNOPSIS πΈ
SUBROUTINE PZLAUUM( UPLO, N, A, IA, JA, DESCA )
CHARACTER UPLO
INTEGER IA, JA, N
INTEGER DESCA( * )
COMPLEX*16 A( * )
π¦ PURPOSE π¦
PZLAUUM computes the product U * U' or L' * L, where the triangular factor U or L is stored in the upper or lower triangular part of the distributed matrix sub( A ) = A(IA:IA+N-1,JA:JA+N-1).
Not me explaining the two moods of this function π here's the vibe check:
- If
UPLO = 'U'or'u'then the upper triangle of the result is stored, overwriting the factorUinsub( A ). - If
UPLO = 'L'or'l'then the lower triangle of the result is stored, overwriting the factorLinsub( A ).
This is the blocked form of the algorithm, calling Level 3 PBLAS. Ate. π₯
π Notes π
Every global data object has a lil bestie called a description vector π This vector stores all the info you need to figure out the mapping between an object element and its corresponding process and memory location. It's giving β¨logisticsβ¨.
Let A be a generic term for any 2D block cyclicly distributed array. Such a global array has an associated description vector DESCA. In the following comments, the character _ should be read as "of the global array". iykyk π
DTYPE_A(global) β stored inDESCA( DTYPE_ ): the descriptor type. In this case,DTYPE_A = 1.CTXT_A(global) β stored inDESCA( CTXT_ ): the BLACS context handle, indicating the BLACS process grid A is distributed over. The context itself is global, but the handle (the integer value) may vary.M_A(global) β stored inDESCA( M_ ): the number of rows in the global arrayA.N_A(global) β stored inDESCA( N_ ): the number of columns in the global arrayA.MB_A(global) β stored inDESCA( MB_ ): the blocking factor used to distribute the rows of the array.NB_A(global) β stored inDESCA( NB_ ): the blocking factor used to distribute the columns of the array.RSRC_A(global) β stored inDESCA( RSRC_ ): the process row over which the first row of the arrayAis distributed.CSRC_A(global) β stored inDESCA( CSRC_ ): the process column over which the first column of the arrayAis distributed.LLD_A(local) β stored inDESCA( LLD_ ): the leading dimension of the local array.LLD_A >= MAX(1,LOCr(M_A)).
Let K be the number of rows or columns of a distributed matrix, and assume that its process grid has dimension p x q.
LOCr( K )denotes the number of elements ofKthat a process would receive ifKwere distributed over thepprocesses of its process column.- Similarly,
LOCc( K )denotes the number of elements ofKthat a process would receive ifKwere distributed over theqprocesses of its process row.
The values of LOCr() and LOCc() may be determined via a call to the ScaLAPACK tool function, NUMROC:
LOCr( M ) = NUMROC( M, MB_A, MYROW, RSRC_A, NPROW ),
LOCc( N ) = NUMROC( N, NB_A, MYCOL, CSRC_A, NPCOL ).
An upper bound for these quantities may be computed by:
LOCr( M ) <= ceil( ceil(M/MB_A)/NPROW )*MB_A
LOCc( N ) <= ceil( ceil(N/NB_A)/NPCOL )*NB_A
π ARGUMENTS π
UPLOβ (global input)CHARACTER*1β Specifies whether the triangular factor stored in the distributed matrixsub( A )is upper or lower triangular:= 'U':Upper triangular= 'L':Lower triangular
Nβ (global input)INTEGERβ The number of rows and columns to be operated on, i.e. the order of the triangular factorUorL.N >= 0. (Zero is allowed bestie, don't come for me.)Aβ (local input/local output)COMPLEX*16β pointer into the local memory to an array of dimension(LLD_A, LOCc(JA+N-1)). On entry, the local pieces of the triangular factorLorU. On exit, ifUPLO = 'U', the upper triangle of the distributed matrixsub( A )is overwritten with the upper triangle of the productU * U'; ifUPLO = 'L', the lower triangle ofsub( A )is overwritten with the lower triangle of the productL' * L. She's a main character who rewrites herself, periodt πIAβ (global input)INTEGERβ The row index in the global arrayAindicating the first row ofsub( A ).JAβ (global input)INTEGERβ The column index in the global arrayAindicating the first column ofsub( A ).DESCAβ (global and local input)INTEGERarray of dimensionDLEN_β The array descriptor for the distributed matrixA.
π«Ά no cap, this is the whole page β nothing skipped, nothing extra, every flag accounted for. π
LAPACK version 1.5 π dated 12 May 1997 β yeah she's vintage, she's iconic, she's still slaying πβ¨ mwah, bye bestie ππ¦
π¦ where this page comes from
- ubuntu jammy: scalapack-doc 1.5-11
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms