Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
Date 7/13/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

mkl_jit_create_?gemm

Create a GEMM kernel that computes a scalar-matrix-matrix product and adds the result to a scalar-matrix product.

Syntax

status = mkl_jit_create_sgemm(jitter, transa, transb, m, n, k, alpha, lda, ldb, beta, ldc)

status = mkl_jit_create_dgemm(jitter, transa, transb, m, n, k, alpha, lda, ldb, beta, ldc)

status = mkl_jit_create_cgemm(jitter, transa, transb, m, n, k, alpha, lda, ldb, beta, ldc)

status = mkl_jit_create_zgemm(jitter, transa, transb, m, n, k, alpha, lda, ldb, beta, ldc)

Include Files

  • mkl_blas.f90

Description

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
NOTE:

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).

NOTE:

The JIT API requires Fortran 90 and the ISO_C_BINDING module.

Input Parameters

transa

CHARACTER*1.

Specifies the form of op(A) used in the generated matrix multiplication:

  • if transa = 'N', then op(A) = A
  • if transa = 'T', then op(A) = AT
  • if transa = 'C', then op(A) = AH

transb

CHARACTER*1.

Specifies the form of op(B) used in the generated matrix multiplication:

  • if transb = 'N', then op(B) = B
  • if transb = 'T', then op(B) = BT
  • if transb = 'C', then op(B) = BH

m

INTEGER.

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

INTEGER.

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

INTEGER.

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

REAL for mkl_jit_create_sgemm

DOUBLE PRECISION for mkl_jit_create_dgemm.

COMPLEX for mkl_jit_create_cgemm

DOUBLE COMPLEX for mkl_jit_create_zgemm

Specifies the scalar alpha.

lda

INTEGER.

Specifies the leading dimension of a.

  • If transa = 'N'lda must be at least max(1,m).

  • If transa = 'T' or transa = 'C', lda must be at least max(1,k).

ldb

INTEGER.

Specifies the leading dimension of b:

  • If transb = 'N'ldb must be at least max(1,k).

  • If transb = 'T' or transb = 'C', ldb must be at least max(1,n).

beta

REAL for mkl_jit_create_sgemm

DOUBLE PRECISION for mkl_jit_create_dgemm.

COMPLEX for mkl_jit_create_cgemm

DOUBLE COMPLEX for mkl_jit_create_zgemm

Specifies the scalar beta.

ldc

INTEGER.

Specifies the leading dimension of c which must be at least max(1,m).

Output Parameters

jitter

TYPE(C_PTR). C pointer to a handle to the newly created code generator.

Return Values

status

INTEGER

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.