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) =XT, or op(X) =XHalphaandbetaare scalarsA,BandCare matricesop(
A) ismxkmatrixop(
B) iskxnmatrixCismxnmatrix
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::nontranstransa=transpose::transortrans=transpose::conjtransColumn major
Aismxkmatrix. Size of arrayamust be at leastlda*kAiskxmmatrix. Size of arrayamust be at leastlda*mRow major
Aismxkmatrix. Size of arrayamust be at leastlda*mAiskxmmatrix. Size of arrayamust be at leastlda*k- lda
Leading dimension of matrix
A. Must be positive.transa=transpose::nontranstransa=transpose::transortrans=transpose::conjtransColumn major
Must be at least
mMust be at least
kRow major
Must be at least
kMust be at least
m- b
Buffer holding input matrix
B. See Matrix Storage for more details.transb=transpose::nontranstransb=transpose::transortrans=transpose::conjtransColumn major
Biskxnmatrix. Size of arraybmust be at leastldb*nBisnxkmatrix. Size of arraybmust be at leastldb*kRow major
Biskxnmatrix. Size of arraybmust be at leastldb*kBisnxkmatrix. Size of arraybmust be at leastldb*n- ldb
Leading dimension of matrix
B. Must be positive.transb=transpose::nontranstransb=transpose::transortrans=transpose::conjtransColumn major
Must be at least
kMust be at least
nRow major
Must be at least
nMust 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
Cismxnmatrix. Size of arraycmust be at leastldc*nRow major
Cismxnmatrix. Size of arraycmust be at leastldc*m- ldc
Leading dimension of matrix
C. Must be positive.Column major
Must be at least
mRow 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.Anot transposedAtransposedColumn major
Aismxkmatrix. Size of arrayamust be at leastlda*kAiskxmmatrix. Size of arrayamust be at leastlda*mRow major
Aismxkmatrix. Size of arrayamust be at leastlda*mAiskxmmatrix. Size of arrayamust be at leastlda*k- lda
Leading dimension of matrix
A. Must be positive.Anot transposedAtransposedColumn major
Must be at least
mMust be at least
kRow major
Must be at least
kMust be at least
m- b
Pointer to input matrix
B. See Matrix Storage for more details.Bnot transposedBtransposedColumn major
Biskxnmatrix. Size of arraybmust be at leastldb*nBisnxkmatrix. Size of arraybmust be at leastldb*kRow major
Biskxnmatrix. Size of arraybmust be at leastldb*kBisnxkmatrix. Size of arraybmust be at leastldb*n- ldb
Leading dimension of matrix
B. Must be positive.Bnot transposedBtransposedColumn major
Must be at least
kMust be at least
nRow major
Must be at least
nMust 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
Cismxnmatrix. Size of arraycmust be at leastldc*nRow major
Cismxnmatrix. Size of arraycmust be at leastldc*m- ldc
Leading dimension of matrix
C. Must be positive.Column major
Must be at least
mRow 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