Visible to Intel only — GUID: GUID-99570BC2-4F4E-4211-A06F-40BAE927EB12
Visible to Intel only — GUID: GUID-99570BC2-4F4E-4211-A06F-40BAE927EB12
mkl_jit_create_?gemm
Create a GEMM kernel that computes a scalar-matrix-matrix product and adds the result to a scalar-matrix product.
mkl_jit_status_t mkl_jit_create_sgemm(void** jitter, const MKL_LAYOUT layout, const MKL_TRANPOSE transa, const MKL_TRANSPOSE transb, const MKL_INT m, const MKL_INT n, const MKL_INT k, const float alpha, const MKL_INT lda, const MKL_INT ldb, const float beta, const MKL_INT ldc);
mkl_jit_status_t mkl_jit_create_dgemm(void** jitter, const MKL_LAYOUT layout, const MKL_TRANPOSE transa, const MKL_TRANSPOSE transb, const MKL_INT m, const MKL_INT n, const MKL_INT k, const double alpha, const MKL_INT lda, const MKL_INT ldb, const double beta, const MKL_INT ldc);
mkl_jit_status_t mkl_jit_create_cgemm(void** jitter, const MKL_LAYOUT layout, const MKL_TRANPOSE transa, const MKL_TRANSPOSE transb, const MKL_INT m, const MKL_INT n, const MKL_INT k, const void* alpha, const MKL_INT lda, const MKL_INT ldb, const void* beta, const MKL_INT ldc);
mkl_jit_status_t mkl_jit_create_zgemm(void** jitter, const MKL_LAYOUT layout, const MKL_TRANPOSE transa, const MKL_TRANSPOSE transb, const MKL_INT m, const MKL_INT n, const MKL_INT k, const void* alpha, const MKL_INT lda, const MKL_INT ldb, const void* beta, const MKL_INT ldc);
- mkl.h
The mkl_jit_create_?gemm functions belong to a set of related routines that enable use of just-in-time code generation.
The mkl_jit_create_?gemm functions create a handle to a just-in-time code generator (a jitter) and generate a GEMM kernel that computes a scalar-matrix-matrix product and adds the result to a scalar-matrix product, with general matrices. The operation of the generated GEMM kernel is defined as follows:
C := alpha*op(A)*op(B) + beta*C
Where:
- op(X) is either op(X) = X or op(X) = XT or op(X) = XH
- alpha and beta are scalars
- A, B, and C are matrices
- op(A) is an m-by-k matrix
- op(B) is a k-by-n matrix
- C is an m-by-n matrix
Generating a new kernel with mkl_jit_create_?gemm involves moderate runtime overhead. To benefit from JIT code generation, use this feature when you need to call the generated kernel many times (for example, several hundred calls).
- layout
-
Specifies whether two-dimensional array storage is row-major (MKL_ROW_MAJOR) or column-major (MKL_COL_MAJOR).
- transa
-
Specifies the form of op(A) used in the generated matrix multiplication:
- if transa = MKL_NOTRANS, then op(A) = A
- if transa = MKL_TRANS, then op(A) = AT
- if transa = MKL_CONJTRANS, then op(A) = AH
- transb
-
Specifies the form of op(B) used in the generated matrix multiplication:
- if transb = MKL_NOTRANS, then op(B) = B
- if transb = MKL_TRANS, then op(B) = BT
- if transb = MKL_CONJTRANS, then op(B) = BH
- m
-
Specifies the number of rows of the matrix op(A) and of the matrix C. The value of m must be at least zero.
- n
-
Specifies the number of columns of the matrix op(B) and of the matrix C. The value of n must be at least zero.
- k
-
Specifies the number of columns of the matrix op(A) and the number of rows of the matrix op(B). The value of k must be at least zero.
- alpha
-
Specifies the scalar alpha.
NOTE:alpha is passed by pointer for mkl_jit_create_cgemm and mkl_jit_create_zgemm.
- lda
-
Specifies the leading dimension of a.
transa=MKL_NOTRANS transa=MKL_TRANS or transa=MKL_CONJTRANS layout=MKL_ROW_MAJOR lda must be at least max(1,k)
lda must be at least max(1,m)
layout=MKL_COL_MAJOR lda must be at least max(1,m)
lda must be at least max(1,k)
- ldb
-
Specifies the leading dimension of b:
transb=MKL_NOTRANS transb=MKL_TRANS or transb=MKL_CONJTRANS layout=MKL_ROW_MAJOR ldb must be at least max(1,n)
ldb must be at least max(1,k)
layout=MKL_COL_MAJOR ldb must be at least max(1,k)
ldb must be at least max(1,n)
- beta
-
Specifies the scalar beta.
NOTE:beta is passed by pointer for mkl_jit_create_cgemm and mkl_jit_create_zgemm.
- ldc
-
Specifies the leading dimension of c.
layout=MKL_ROW_MAJOR ldc must be at least max(1,n)
layout=MKL_COL_MAJOR ldc must be at least max(1,m)
jitter |
Pointer to a handle to the newly created code generator. |
- status
-
Returns one of the following:
MKL_JIT_ERROR if the handle cannot be created (no memory)
—or—
MKL_JIT_SUCCESS if the jitter has been created and the GEMM kernel was successfully created
—or—
MKL_NO_JIT if the jitter has been created, but a JIT GEMM kernel was not created because JIT is not beneficial for the given input parameters. The function pointer returned by mkl_jit_get_?gemm_ptr will call standard (non-JIT) GEMM.