Intel® Math Kernel Library 2019 Developer Reference - C

mkl_jit_get_?gemm_ptr

Return the GEMM kernel associated with a jitter previously created with mkl_jit_create_?gemm.

Syntax

sgemm_jit_kernel_t mkl_jit_get_sgemm_ptr(const void* jitter);

dgemm_jit_kernel_t mkl_jit_get_dgemm_ptr(const void* jitter);

Include Files

Description

The mkl_jit_get_?gemm_ptr functions belong to a set of related routines that enable use of just-in-time code generation.

The mkl_jit_get_?gemm_ptr functions take as input a jitter previously created with mkl_jit_create_?gemm, and return the GEMM kernel associated with that jitter. The returned GEMM kernel computes a scalar-matrix-matrix product and adds the result to a scalar-matrix product, with general matrices. The operation is defined as follows:

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

Where:

Note

Just-in-time (JIT) code generation introduces a runtime overhead when calling mkl_jit_create_?gemm. To benefit from JIT code generation, use this feature when you need to call the generated kernel many times (for example, several hundred calls).

Input Parameter

jitter

Jitter handle.

Return Values

func

  • sgemm_jit_kernel_t – A function pointer type expecting four inputs of type void*, float*, float*, and float*

    typedef void (*sgemm_jit_kernel_t)(void*,float*,float*,float*);
  • dgemm_jit_kernel_t – A function pointer type expecting four inputs of type void*, double*, double*, and double*

    typedef void(*dgemm_jit_kernel_t)(void*,double*,double*,double*);

Returns a function pointer to a GEMM kernel. The GEMM kernel is called with four parameters: the jitter, and the three matrices a, b, and c.

If layout, transa, transb, m, n, k, lda, ldb, and ldc are the parameters used during the creation of the input jitter, then:

a

  layout = MKL_COL_MAJOR layout = MKL_ROW_MAJOR

transa = MKL_NOTRANS

Array of size lda*k

Before calling the returned function pointer, the leading m-by-k part of the array a must contain the matrix A.

Array of size lda*m

Before calling the returned function pointer, the leading k-by-m part of the array a must contain the matrix A.

transa = MKL_TRANS

Array of size lda*m

Before calling the returned function pointer, the leading k-by-m part of the array a must contain the matrix A.

Array of size lda*k

Before calling the returned function pointer, the leading m-by-k part of the array a must contain the matrix A.

b

  layout = MKL_COL_MAJOR layout = MKL_ROW_MAJOR

transb = MKL_NOTRANS

Array of size ldb*n

Before calling the returned function pointer, the leading k-by-n part of the array b must contain the matrix B.

Array of size ldb*k

Before calling the returned function pointer, the leading n-by-k part of the array b must contain the matrix B.

transb = MKL_TRANS

Array of size ldb*k

Before calling the returned function pointer, the leading n-by-k part of the array b must contain the matrix B.

Array of size ldb*n

Before calling the returned function pointer, the leading k-by-n part of the array b must contain the matrix B.

c

layout = MKL_COL_MAJOR layout = MKL_ROW_MAJOR

Array of size ldc*n

Before calling the returned function pointer, the leading m-by-n part of the array c must contain the matrix C.

Array of size ldc*m

Before calling the returned function pointer, the leading n-by-m part of the array c must contain the matrix C.