gemm¶
Computes a matrix-matrix product with general matrices.
Description¶
The gemm
routines compute a scalar-matrix-matrix product and add the result to a scalar-matrix product, with general matrices.
The operation is defined as:
where:
op(
X
) is one of op(X
) =X
, or op(X
) =X
T, or op(X
) =X
Halpha
andbeta
are scalarsA
,B
andC
are matricesop(
A
) ism
xk
matrixop(
B
) isk
xn
matrixC
ism
xn
matrix
gemm
supports the following precisions:
Ts |
Ta |
Tb |
Tc |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gemm (Buffer Version)¶
Syntax¶
namespace oneapi::mkl::blas::column_major {
void gemm(sycl::queue &queue,
oneapi::mkl::transpose transa,
oneapi::mkl::transpose transb,
std::int64_t m,
std::int64_t n,
std::int64_t k,
Ts alpha,
sycl::buffer<Ta,1> &a,
std::int64_t lda,
sycl::buffer<Tb,1> &b,
std::int64_t ldb,
Ts beta,
sycl::buffer<Tc,1> &c,
std::int64_t ldc)
}
namespace oneapi::mkl::blas::row_major {
void gemm(sycl::queue &queue,
oneapi::mkl::transpose transa,
oneapi::mkl::transpose transb,
std::int64_t m,
std::int64_t n,
std::int64_t k,
Ts alpha,
sycl::buffer<Ta,1> &a,
std::int64_t lda,
sycl::buffer<Tb,1> &b,
std::int64_t ldb,
Ts beta,
sycl::buffer<Tc,1> &c,
std::int64_t ldc)
}
Input Parameters¶
- queue
The queue where the routine should be executed.
- transa
Specifies op(
A
), the transposition operation applied to matrixA
. See Data Types for more details.- transb
Specifies op(
B
), the transposition operation applied to matrixB
. See Data Types for more details.- m
Number of rows of matrix op(
A
) and matrixC
. Must be at least zero.- n
Number of columns of matrix op(
B
) and matrixC
. Must be at least zero.- k
Number of columns of matrix op(
A
) and rows of matrix op(B
). Must be at least zero.- alpha
Scaling factor for matrix-matrix product.
- a
Buffer holding input matrix
A
. See Matrix Storage for more details.transa
=transpose::nontrans
transa
=transpose::trans
ortrans
=transpose::conjtrans
Column major
A
ism
xk
matrix. Size of arraya
must be at leastlda
*k
A
isk
xm
matrix. Size of arraya
must be at leastlda
*m
Row major
A
ism
xk
matrix. Size of arraya
must be at leastlda
*m
A
isk
xm
matrix. Size of arraya
must be at leastlda
*k
- lda
Leading dimension of matrix
A
. Must be positive.transa
=transpose::nontrans
transa
=transpose::trans
ortrans
=transpose::conjtrans
Column major
Must be at least
m
Must be at least
k
Row major
Must be at least
k
Must be at least
m
- b
Buffer holding input matrix
B
. See Matrix Storage for more details.transb
=transpose::nontrans
transb
=transpose::trans
ortrans
=transpose::conjtrans
Column major
B
isk
xn
matrix. Size of arrayb
must be at leastldb
*n
B
isn
xk
matrix. Size of arrayb
must be at leastldb
*k
Row major
B
isk
xn
matrix. Size of arrayb
must be at leastldb
*k
B
isn
xk
matrix. Size of arrayb
must be at leastldb
*n
- ldb
Leading dimension of matrix
B
. Must be positive.transb
=transpose::nontrans
transb
=transpose::trans
ortrans
=transpose::conjtrans
Column major
Must be at least
k
Must be at least
n
Row major
Must be at least
n
Must be at least
k
- beta
Scaling factor for matrix
C
.- c
Buffer holding input/output matrix
C
. See Matrix Storage for more details.Column major
C
ism
xn
matrix. Size of arrayc
must be at leastldc
*n
Row major
C
ism
xn
matrix. Size of arrayc
must be at leastldc
*m
- ldc
Leading dimension of matrix
C
. Must be positive.Column major
Must be at least
m
Row major
Must be at least
n
Output Parameters¶
- c
Output buffer overwritten by
alpha
* op(A
)*op(B
) +beta
*C
.
Note
If beta
= 0, matrix C
does not need to be initialized before calling gemm
.
Examples¶
An example of how to use buffer version of gemm
can be found in oneMKL installation directory, under:
examples/dpcpp/blas/source/gemm.cpp
gemm (USM Version)¶
Syntax¶
namespace oneapi::mkl::blas::column_major {
sycl::event gemm(sycl::queue &queue,
oneapi::mkl::transpose transa,
oneapi::mkl::transpose transb,
std::int64_t m,
std::int64_t n,
std::int64_t k,
Ts alpha,
const Ta *a,
std::int64_t lda,
const Tb *b,
std::int64_t ldb,
Ts beta,
Tc *c,
std::int64_t ldc,
const std::vector<sycl::event> &dependencies = {})
}
namespace oneapi::mkl::blas::row_major {
sycl::event gemm(sycl::queue &queue,
oneapi::mkl::transpose transa,
oneapi::mkl::transpose transb,
std::int64_t m,
std::int64_t n,
std::int64_t k,
Ts alpha,
const Ta *a,
std::int64_t lda,
const Tb *b,
std::int64_t ldb,
Ts beta,
Tc *c,
std::int64_t ldc,
const std::vector<sycl::event> &dependencies = {})
}
Input Parameters¶
- queue
The queue where the routine should be executed.
- transa
Specifies op(
A
), the transposition operation applied to matrixA
. See Data Types for more details.- transb
Specifies op(
B
), the transposition operation applied to matrixB
. See Data Types for more details.- m
Number of rows of matrix op(
A
) and matrixC
. Must be at least zero.- n
Number of columns of matrix op(
B
) and matrixC
. Must be at least zero.- k
Number of columns of matrix op(
A
) and rows of matrix op(B
). Must be at least zero.- alpha
Scaling factor for matrix-matrix product.
- a
Pointer to input matrix
A
. See Matrix Storage for more details.A
not transposedA
transposedColumn major
A
ism
xk
matrix. Size of arraya
must be at leastlda
*k
A
isk
xm
matrix. Size of arraya
must be at leastlda
*m
Row major
A
ism
xk
matrix. Size of arraya
must be at leastlda
*m
A
isk
xm
matrix. Size of arraya
must be at leastlda
*k
- lda
Leading dimension of matrix
A
. Must be positive.A
not transposedA
transposedColumn major
Must be at least
m
Must be at least
k
Row major
Must be at least
k
Must be at least
m
- b
Pointer to input matrix
B
. See Matrix Storage for more details.B
not transposedB
transposedColumn major
B
isk
xn
matrix. Size of arrayb
must be at leastldb
*n
B
isn
xk
matrix. Size of arrayb
must be at leastldb
*k
Row major
B
isk
xn
matrix. Size of arrayb
must be at leastldb
*k
B
isn
xk
matrix. Size of arrayb
must be at leastldb
*n
- ldb
Leading dimension of matrix
B
. Must be positive.B
not transposedB
transposedColumn major
Must be at least
k
Must be at least
n
Row major
Must be at least
n
Must be at least
k
- beta
Scaling factor for matrix
C
.- c
Pointer to input/output matrix
C
. See Matrix Storage for more details.Column major
C
ism
xn
matrix. Size of arrayc
must be at leastldc
*n
Row major
C
ism
xn
matrix. Size of arrayc
must be at leastldc
*m
- ldc
Leading dimension of matrix
C
. Must be positive.Column major
Must be at least
m
Row major
Must be at least
n
- dependencies
List of events to wait for before starting computation, if any. If omitted, defaults to no dependencies.
Output Parameters¶
- c
Pointer to output matrix overwritten by
alpha
* op(A
)*op(B
) +beta
*C
.
Note
If beta
= 0, matrix C
does not need to be initialized before calling gemm
.
Return Values¶
Output event to wait on to ensure computation is complete.
Examples¶
An example of how to use USM version of gemm
can be found in oneMKL installation directory, under:
examples/dpcpp/blas/source/gemm_usm.cpp