ZGEMM(3)

πŸ“¦ version 3.12.0, in opensuse-leap 16.0

πŸ’… ZGEMM β€” the BLAS routine that does complex matrix-matrix math and SERVES πŸ‘‘

okay bestie, so this page is from the LAPACK library functions manual (the file lives at /home/abui...SRC/zgemm.f(3) if you're nosy like me πŸŽ€). It's the docs for ZGEMM, and honestly? She's a legend. Let's get into it πŸ’–


✨ NAME ✨

/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/BLAS/SRC/zgemm.f

that's the whole vibe check β€” that's the file. lowercase, .f, Fortran, iconic πŸ’…


🌸 SYNOPSIS 🌸

Functions/Subroutines

subroutine ZGEMM (transa, transb, m, n, k, alpha, a, lda, b, ldb, beta,
    c, ldc)

ZGEMM

like… that's her. that's the whole signature. slay ✨


πŸ¦‹ Function/Subroutine Documentation πŸ¦‹

subroutine ZGEMM (character transa, character transb, integer m, integer n,
    integer k, complex*16 alpha, complex*16, dimension(lda,*) a, integer
    lda, complex*16, dimension(ldb,*) b, integer ldb, complex*16 beta,
    complex*16, dimension(ldc,*) c, integer ldc)

ZGEMM

πŸŽ€ Purpose πŸŽ€

bestie. listen. ZGEMM performs one of the matrix-matrix operations

C := alpha*op( A )*op( B ) + beta*C,

where op( X ) is one of

op( X ) = X   or   op( X ) = X**T   or   op( X ) = X**H,

and like β€” alpha and beta are scalars, and A, B and C are matrices, with op( A ) an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. the dimensions line UP, the math lines UP, everything is correct. periodt πŸ”₯


πŸ’œ Parameters πŸ’œ

  • TRANSA β€” TRANSA is CHARACTER*1. on entry, TRANSA specifies the form of op( A ) to be used in the matrix multiplication, like this:
    • TRANSA = 'N' or 'n', op( A ) = A.
    • TRANSA = 'T' or 't', op( A ) = A**T.
    • TRANSA = 'C' or 'c', op( A ) = A**H.
  • TRANSB β€” TRANSB is CHARACTER*1. on entry, TRANSB specifies the form of op( B ) to be used in the matrix multiplication, as follows:
    • TRANSB = 'N' or 'n', op( B ) = B.
    • TRANSB = 'T' or 't', op( B ) = B**T.
    • TRANSB = 'C' or 'c', op( B ) = B**H.
  • M β€” M is INTEGER. on entry, M specifies the number of rows of the matrix op( A ) and of the matrix C. M must be at least zero. (zero is allowed, she's not gonna judge 🫢)
  • N β€” N is INTEGER. on entry, N specifies the number of columns of the matrix op( B ) and the number of columns of the matrix C. N must be at least zero.
  • K β€” K is INTEGER. on entry, K specifies the number of columns of the matrix op( A ) and the number of rows of the matrix op( B ). K must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX*16. on entry, ALPHA specifies the scalar alpha. the main character scalar, honestly ✨
  • A β€” A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is k when TRANSA = 'N' or 'n', and is m otherwise. before entry with TRANSA = 'N' or 'n', the leading m by k part of the array A must contain the matrix A, otherwise the leading k by m part of the array A must contain the matrix A. iykyk πŸ’…
  • LDA β€” LDA is INTEGER. on entry, LDA specifies the first dimension of A as declared in the calling (sub) program. when TRANSA = 'N' or 'n' then LDA must be at least max( 1, m ), otherwise LDA must be at least max( 1, k ).
  • B β€” B is COMPLEX*16 array, dimension ( LDB, kb ), where kb is n when TRANSB = 'N' or 'n', and is k otherwise. before entry with TRANSB = 'N' or 'n', the leading k by n part of the array B must contain the matrix B, otherwise the leading n by k part of the array B must contain the matrix B.
  • LDB β€” LDB is INTEGER. on entry, LDB specifies the first dimension of B as declared in the calling (sub) program. when TRANSB = 'N' or 'n' then LDB must be at least max( 1, k ), otherwise LDB must be at least max( 1, n ).
  • BETA β€” BETA is COMPLEX*16. on entry, BETA specifies the scalar beta. when BETA is supplied as zero then C need not be set on input. (yes really, she said you can skip it πŸ™ˆ)
  • C β€” C is COMPLEX*16 array, dimension ( LDC, N ). before entry, the leading m by n part of the array C must contain the matrix C, except when beta is zero, in which case C need not be set on entry. on exit, the array C is overwritten by the m by n matrix ( alpha*op( A )*op( B ) + beta*C ). she goes IN and she replaces the whole thing, no cap 😭πŸ”₯
  • LDC β€” LDC is INTEGER. on entry, LDC specifies the first dimension of C as declared in the calling (sub) program. LDC must be at least max( 1, m ).

πŸ‘‘ Author πŸ‘‘

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

the whole squad, the founding mothers and fathers of your linear algebra 🫢


🌈 Further Details: 🌈

  • Level 3 Blas routine. (level 3! she's not a vector, she's not a matrix-vector, she's the full matrix-matrix experience πŸ’…)
  • -- Written on 8-February-1989.
    • Jack Dongarra, Argonne National Laboratory.
    • Iain Duff, AERE Harwell.
    • Jeremy Du Croz, Numerical Algorithms Group Ltd.
    • Sven Hammarling, Numerical Algorithms Group Ltd.

like… 1989. they were doing this before most of us were born and it still hits. respect the elders πŸŽ€


⭐ Definition ⭐

Definition at line 186 of file zgemm.f.


πŸ“ Author πŸ“

(pulling up in a whole second author section, because sure)

Generated automatically by Doxygen for LAPACK from the source code. the doc generator said "I got this" and honestly it did πŸ’–


real talk though bestie: LDA, LDB and LDC have minimum requirements β€” LDA at least max( 1, m ) or max( 1, k ) depending on TRANSA; LDB at least max( 1, k ) or max( 1, n ) depending on TRANSB; LDC at least max( 1, m ). and M, N, K must all be at least zero. don't come for me if you skip those, the routine will not be nice about it 😭

so yeah, that's ZGEMM. ❀️ this was LAPACK, Version 3.12.0, and the page itself was /home/abui...SRC/zgemm.f(3) β€” go forth and multiply your complex matrices, bestie. mwah πŸ’‹βœ¨

πŸ“¦ where this page comes from