_GEMM(3F) _GEMM(3F)
dgemm, sgemm, zgemm, cgemm - BLAS level three Matrix Product
FORTRAN 77 SYNOPSIS
subroutine dgemm( transa,transb,m,n,k,alpha,a,lda,b,ldb,beta,c,ldc )
character*1 transa, transb
integer m, n, k, lda, ldb, ldc
double precision alpha, beta
double precision a( lda,*), b(ldb,*), c(ldc,*)
subroutine sgemm( transa,transb,m,n,k,alpha,a,lda,b,ldb,beta,c,ldc )
character*1 transa, transb
integer m, n, k, lda, ldb, ldc
real alpha, beta
real a( lda,*), b(ldb,*), c(ldc,*)
subroutine zgemm( transa,transb,m,n,k,alpha,a,lda,b,ldb,beta,c,ldc )
character*1 transa, transb
integer m, n, k, lda, ldb, ldc
double complex alpha, beta
double complex a( lda,*), b(ldb,*), c(ldc,*)
subroutine cgemm( transa,transb,m,n,k,alpha,a,lda,b,ldb,beta,c,ldc )
character*1 transa, transb
integer m, n, k, lda, ldb, ldc
complex alpha, beta
complex a( lda,*), b(ldb,*), c(ldc,*)
void dgemm( transa,transb,m,n,k,alpha,a,lda,b,ldb,beta,c,ldc )
MatrixTranspose transa, transb;
Integer m, n, k, lda, ldb, ldc;
double alpha, beta;
double (*a)[lda*ka], (*b)[lda*n], (*c)[lda*kb];
void sgemm( transa,transb,m,n,k,alpha,a,lda,b,ldb,beta,c,ldc )
MatrixTranspose transa, transb;
Integer m, n, k, lda, ldb, ldc;
float alpha, beta;
float (*a)[lda*ka], (*b)[lda*n], (*c)[lda*kb];
void zgemm( transa,transb,m,n,k,alpha,a,lda,b,ldb,beta,c,ldc )
MatrixTranspose transa, transb;
Integer m, n, k, lda, ldb, ldc;
Zomplex alpha, beta;
Zomplex (*a)[lda*ka], (*b)[lda*n], (*c)[lda*kb];
void cgemm( transa,transb,m,n,k,alpha,a,lda,b,ldb,beta,c,ldc )
MatrixTranspose transa, transb;
Integer m, n, k, lda, ldb, ldc;
Page 1
_GEMM(3F) _GEMM(3F)
Complex alpha, beta;
Complex (*a)[lda*ka], (*b)[lda*n], (*c)[lda*kb];
dgemm, sgemm, zgemm and cgemm perform 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',
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.
transa On entry, transa specifies the form of op( A ) to be used in the
matrix multiplication as follows:
FORTRAN
transa = 'N' or 'n', op( A ) = A.
transa = 'T' or 't', op( A ) = A'.
transa = 'C' or 'c', op( A ) = conjg( A').
C
transa = NoTranspose op( A ) = A.
transa = Transpose op( A ) = A'.
transa = ConjugateTranspose op( A ) = conjg( A').
Unchanged on exit.
transb On entry, transb specifies the form of op( B ) to be used in the
matrix multiplication as follows:
FORTRAN
transb = 'N' or 'n', op( B ) = B.
transb = 'T' or 't', op( B ) = B'.
transb = 'C' or 'c', op( B ) = conjg( B' ).
C
transb = NoTranspose op( B ) = B.
transb = Transpose op( B ) = B'.
transb = ConjugateTranspose op( B ) = conjg( B' ).
Unchanged on exit.
Page 2
_GEMM(3F) _GEMM(3F)
m On entry, m specifies the number of rows of the matrix op( A )
and of the matrix C. m must be at least zero.
Unchanged on exit.
n 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.
Unchanged on exit.
k 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.
Unchanged on exit.
alpha On entry, alpha specifies the scalar alpha.
Unchanged on exit.
a An array containing the matrix A.
FORTRAN
Array of dimension ( lda, ka ).
C
A pointer to an array of size lda*ka.
See note below about array storage convention for C.
ka is k when transa = 'N' or 'n' or NoTranspose and is m
otherwise. Before entry with transa = 'N' or 'n' or NoTranspose,
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.
Unchanged on exit.
lda On entry, lda specifies the first dimension of a as declared in
the calling (sub) program. When transa = 'N' or 'n' or
NoTranspose, then lda must be at least max( 1, m ), otherwise lda
must be at least max( 1, k ).
Unchanged on exit.
b An array containing the matrix B.
FORTRAN
An array of dimension ( ldb, kb ).
C
A pointer to an array of size ldb*kb.
See note below about array storage convention for C.
kb is n when transb = 'N' or 'n' or NoTranspose, and is k
otherwise. Before entry with transb = 'N' or 'n' or NoTranspose,
the leading k by n part of the array b must contain the matrix B,
Page 3
_GEMM(3F) _GEMM(3F)
otherwise the leading n by k part of the array b must contain the
matrix B.
Unchanged on exit.
ldb On entry, ldb specifies the first dimension of b as declared in
the calling (sub)program. When transb = 'N' or 'n' or
NoTranspose then ldb must be at least max( 1, k ), otherwise ldb
must be at least max( 1, n ).
Unchanged on exit.
beta On entry, beta specifies the scalar beta. When beta is supplied
as zero then c need not be set on input.
Unchanged on exit.
c An array containing the matrix C.
FORTRAN
An array of dimension ( ldc, n ).
C
A pointer to an array of size ldc*n.
See note below about array storage convention for C.
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 ).
ldc On entry, ldc specifies the first dimension of c as declared in
the calling (sub) program. ldc must be at least max( 1, m ).
Unchanged on exit.
C ARRAY STORAGE CONVENTION
The matrices are assumed to be stored in a one dimensional C array
in an analogous fashion as a Fortran array (column major). Therefore,
the element A(i+1,j) of matrix A is stored immediately after the
element A(i,j), while A(i,j+1) is lda elements apart from A(i,j).
The element A(i,j) of the matrix can be accessed directly by reference
to a[ (j-1)*lda + (i-1) ].
Jack Dongarra, Argonne National Laboratory.
Iain Duff, AERE Harwell.
Jeremy Du Croz, Numerical Algorithms Group Ltd.
Sven Hammarling, Numerical Algorithms Group Ltd.
Page 4
_GEMM(3F) _GEMM(3F)
Optimized and parallelized for SGI R3000, R4x00 and R8000 platforms.
PPPPaaaaggggeeee 5555 [ Back ]
|