LIBXSMM Module



Contents

LIBXSMM_VERSION LIBXSMM_BRANCH LIBXSMM_VERSION_MAJOR LIBXSMM_VERSION_MINOR LIBXSMM_VERSION_UPDATE LIBXSMM_VERSION_PATCH LIBXSMM_CACHELINE LIBXSMM_ALIGNMENT LIBXSMM_PREFETCH LIBXSMM_MAX_MNK LIBXSMM_MAX_DIM LIBXSMM_FLAGS LIBXSMM_ILP64 LIBXSMM_COL_MAJOR LIBXSMM_ROW_MAJOR LIBXSMM_BLASINT_KIND LIBXSMM_TICKINT_KIND LIBXSMM_ALPHA LIBXSMM_BETA LIBXSMM_GEMM_FLAG_NONE LIBXSMM_GEMM_FLAG_TRANS_A LIBXSMM_GEMM_FLAG_TRANS_B LIBXSMM_GEMM_FLAG_TRANS_AB LIBXSMM_GEMM_FLAG_BETA_0 LIBXSMM_GEMM_FLAG_ALIGN_A LIBXSMM_GEMM_FLAG_ALIGN_C LIBXSMM_GEMM_FLAG_ALIGN_C_NTS_HINT LIBXSMM_GEMM_FLAG_ALIGN_C_NTS_HINT_BETA_0 LIBXSMM_GEMM_FLAG_INVALID LIBXSMM_DATATYPE_F64 LIBXSMM_DATATYPE_F32 LIBXSMM_DATATYPE_BF16 LIBXSMM_DATATYPE_F16 LIBXSMM_DATATYPE_BF8 LIBXSMM_DATATYPE_HF8 LIBXSMM_DATATYPE_I64 LIBXSMM_DATATYPE_I32 LIBXSMM_DATATYPE_I16 LIBXSMM_DATATYPE_I8 LIBXSMM_DATATYPE_UNSIGNED LIBXSMM_DATATYPE_UNSUPPORTED unnamed LIBXSMM_TARGET_ARCH_UNKNOWN LIBXSMM_TARGET_ARCH_GENERIC LIBXSMM_X86_GENERIC LIBXSMM_X86_SSE3 LIBXSMM_X86_SSE4 LIBXSMM_X86_AVX LIBXSMM_X86_AVX2 LIBXSMM_X86_AVX2_ADL LIBXSMM_X86_AVX2_SRF LIBXSMM_X86_AVX512_VL128_SKX LIBXSMM_X86_AVX512_VL256_SKX LIBXSMM_X86_AVX512_VL256_CLX LIBXSMM_X86_AVX512_VL256_CPX LIBXSMM_X86_AVX512_SKX LIBXSMM_X86_AVX512_CLX LIBXSMM_X86_AVX512_CPX LIBXSMM_X86_AVX512_SPR LIBXSMM_X86_AVX512_GNR LIBXSMM_X86_ALLFEAT LIBXSMM_AARCH64_V81 LIBXSMM_AARCH64_V82 LIBXSMM_AARCH64_APPL_M1 LIBXSMM_AARCH64_SVE128 LIBXSMM_AARCH64_SVE256 LIBXSMM_AARCH64_NEOV1 LIBXSMM_AARCH64_SVX512 LIBXSMM_AARCH64_A64FX LIBXSMM_AARCH64_ALLFEAT

Variables

Type Visibility Attributes Name Initial
character, public, parameter :: LIBXSMM_VERSION = "$VERSION"

Name of the version (stringized set of version numbers).

character, public, parameter :: LIBXSMM_BRANCH = "$BRANCH"

Name of the branch of which the version is derived from.

integer(kind=C_INT), public, parameter :: LIBXSMM_VERSION_MAJOR = $MAJOR

Major version based on the last reachable tag under RCS.

integer(kind=C_INT), public, parameter :: LIBXSMM_VERSION_MINOR = $MINOR

Minor version based on the last reachable tag of the RCS.

integer(kind=C_INT), public, parameter :: LIBXSMM_VERSION_UPDATE = $UPDATE

Update number based on the last reachable tag under RCS.

integer(kind=C_INT), public, parameter :: LIBXSMM_VERSION_PATCH = $PATCH

Patch number counting commits since the last version stamp.

integer(kind=C_INT), public, parameter :: LIBXSMM_CACHELINE = $CACHELINE

Parameters the library and static kernels were built for.

integer(kind=C_INT), public, parameter :: LIBXSMM_ALIGNMENT = $CACHELINE
integer(kind=C_INT), public, parameter :: LIBXSMM_PREFETCH = $PREFETCH
integer(kind=C_INT), public, parameter :: LIBXSMM_MAX_MNK = $MAX_MNK
integer(kind=C_INT), public, parameter :: LIBXSMM_MAX_DIM = $MAX_DIM
integer(kind=C_INT), public, parameter :: LIBXSMM_FLAGS = $FLAGS
integer(kind=C_INT), public, parameter :: LIBXSMM_ILP64 = $ILP64
integer(kind=C_INT), public, parameter :: LIBXSMM_COL_MAJOR = 1

Parameters supplied for backward compatibility (deprecated).

integer(kind=C_INT), public, parameter :: LIBXSMM_ROW_MAJOR = 0
integer(kind=C_INT), public, parameter :: LIBXSMM_BLASINT_KIND = $BLASINT_KIN

LIBXSMM_BLASINT_KIND (LP64: 32-bit, ILP64: 64-bit).

integer(kind=C_INT), public, parameter :: LIBXSMM_TICKINT_KIND = C_LONG_LONG

Integer kind used by timer interface.

real(kind=C_DOUBLE), public, parameter :: LIBXSMM_ALPHA = REAL($ALPHA, C_DOUB

Parameters for simplified GEMM interface.

real(kind=C_DOUBLE), public, parameter :: LIBXSMM_BETA = REAL($BETA, C_DOUBLE
integer(kind=C_INT), public, parameter :: LIBXSMM_GEMM_FLAG_NONE = 0

Flag enumeration which can be IORed.

integer(kind=C_INT), public, parameter :: LIBXSMM_GEMM_FLAG_TRANS_A = 1

Flag enumeration which can be IORed.

integer(kind=C_INT), public, parameter :: LIBXSMM_GEMM_FLAG_TRANS_B = 2

Flag enumeration which can be IORed.

integer(kind=C_INT), public, parameter :: LIBXSMM_GEMM_FLAG_TRANS_AB = IOR(LIBXSMM_GEMM_FLAG_TRANS_A, LIBXSMM_GEMM_FLAG_TRANS_B)

Flag enumeration which can be IORed.

integer(kind=C_INT), public, parameter :: LIBXSMM_GEMM_FLAG_BETA_0 = 4

Flag enumeration which can be IORed.

integer(kind=C_INT), public, parameter :: LIBXSMM_GEMM_FLAG_ALIGN_A = 8

Flag enumeration which can be IORed.

integer(kind=C_INT), public, parameter :: LIBXSMM_GEMM_FLAG_ALIGN_C = 16

Flag enumeration which can be IORed.

integer(kind=C_INT), public, parameter :: LIBXSMM_GEMM_FLAG_ALIGN_C_NTS_HINT = IOR(1024, LIBXSMM_GEMM_FLAG_ALIGN_C)

Flag enumeration which can be IORed.

integer(kind=C_INT), public, parameter :: LIBXSMM_GEMM_FLAG_ALIGN_C_NTS_HINT_BETA_0 = IOR(LIBXSMM_GEMM_FLAG_ALIGN_C_NTS_HINT, LIBXSMM_GEMM_FLAG_BETA_0)

Flag enumeration which can be IORed.

integer(kind=C_INT), public, parameter :: LIBXSMM_GEMM_FLAG_INVALID = 131072

Flag enumeration which can be IORed.

integer(kind=C_INT), public, parameter :: LIBXSMM_DATATYPE_F64 = 0

Enumerates element/data types.

integer(kind=C_INT), public, parameter :: LIBXSMM_DATATYPE_F32 = 1

Enumerates element/data types.

integer(kind=C_INT), public, parameter :: LIBXSMM_DATATYPE_BF16 = 2

Enumerates element/data types.

integer(kind=C_INT), public, parameter :: LIBXSMM_DATATYPE_F16 = 3

Enumerates element/data types.

integer(kind=C_INT), public, parameter :: LIBXSMM_DATATYPE_BF8 = 4

Enumerates element/data types.

integer(kind=C_INT), public, parameter :: LIBXSMM_DATATYPE_HF8 = 5

Enumerates element/data types.

integer(kind=C_INT), public, parameter :: LIBXSMM_DATATYPE_I64 = 6

Enumerates element/data types.

integer(kind=C_INT), public, parameter :: LIBXSMM_DATATYPE_I32 = 7

Enumerates element/data types.

integer(kind=C_INT), public, parameter :: LIBXSMM_DATATYPE_I16 = 8

Enumerates element/data types.

integer(kind=C_INT), public, parameter :: LIBXSMM_DATATYPE_I8 = 9

Enumerates element/data types.

integer(kind=C_INT), public, parameter :: LIBXSMM_DATATYPE_UNSIGNED = 10

Enumerates element/data types.

integer(kind=C_INT), public, parameter :: LIBXSMM_DATATYPE_UNSUPPORTED = 11

Enumerates element/data types.

integer(kind=C_INT), public, parameter ::

Enumeration of prefetch strategies which can be IORed.

integer(kind=C_INT), public, parameter :: LIBXSMM_TARGET_ARCH_UNKNOWN = 0

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_TARGET_ARCH_GENERIC = 1

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_GENERIC = 1002

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_SSE3 = 1003

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_SSE4 = 1004

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX = 1005

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX2 = 1006

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX2_ADL = 1007

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX2_SRF = 1008

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX512_VL128_SKX = 1041

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX512_VL256_SKX = 1051

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX512_VL256_CLX = 1052

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX512_VL256_CPX = 1053

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX512_SKX = 1101

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX512_CLX = 1102

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX512_CPX = 1103

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX512_SPR = 1104

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_AVX512_GNR = 1105

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_X86_ALLFEAT = 1999

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_AARCH64_V81 = 2001

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_AARCH64_V82 = 2002

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_AARCH64_APPL_M1 = 2101

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_AARCH64_SVE128 = 2201

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_AARCH64_SVE256 = 2301

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_AARCH64_NEOV1 = 2302

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_AARCH64_SVX512 = 2401

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_AARCH64_A64FX = 2402

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().

integer(kind=C_INT), public, parameter :: LIBXSMM_AARCH64_ALLFEAT = 2999

Enumerates the available target architectures and instruction set extensions as returned by libxsmm_get_target_archid().


Interfaces

interface

  • public pure function libxsmm_get_target_archid() bind(C)

    Returns the architecture and instruction set extension as determined by the CPUID flags, as set by the libxsmm_get_target_arch* functions, or as set by the LIBXSMM_TARGET environment variable.

    Arguments

    None

    Return Value integer(kind=C_INT)

interface

  • public pure function libxsmm_get_verbosity() bind(C)

    Get the level of verbosity.

    Arguments

    None

    Return Value integer(kind=C_INT)

interface

  • public function libxsmm_timer_tick() bind(C)

    Impure function which returns the current clock tick of a monotonic timer source; uses a platform-specific resolution. Implicit FORTRAN 77 interface: not available.

    Arguments

    None

    Return Value integer(kind=libxsmm_tickint_kind)

interface

  • public function libxsmm_timer_duration(tick0, tick1) bind(C)

    Impure function (timer freq. may vary) which returns the duration (in seconds) between two values received by libxsmm_timer_tick. Implicit FORTRAN 77 interface: not available.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=LIBXSMM_TICKINT_KIND), intent(in), VALUE :: tick0
    integer(kind=LIBXSMM_TICKINT_KIND), intent(in), VALUE :: tick1

    Return Value real(kind=C_DOUBLE)

interface

  • public subroutine libxsmm_init() bind(C)

    Initialize the library.

    Arguments

    None

interface

  • public subroutine libxsmm_finalize() bind(C)

    De-initialize the library.

    Arguments

    None

interface

  • public subroutine libxsmm_set_target_archid(archid) bind(C)

    Set target architecture (archid: see PARAMETER enumeration) for subsequent code generation (JIT).

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), intent(in), VALUE :: archid

interface

  • public subroutine libxsmm_set_target_arch(arch) bind(C)

    Set target architecture for subsequent code generation (JIT); arch argument can be "sse", "snb", "hsw", "skx", "clx", "cpx", "spr", or "0" to rely on the CPUID (default). There are some alternative target names as well: "sse", "avx", "avx2", "avx3" (incomplete list).

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in) :: arch(*)

interface

  • public subroutine libxsmm_set_verbosity(level) bind(C)

    Set the level of verbosity (0: off, positive value: verbosity level, negative value: maximum verbosity, which also dumps JIT-code).

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), intent(in), VALUE :: level

interface

  • public subroutine libxsmm_release_kernel(kernel) bind(C, NAME="0")

    Deallocates the JIT'ted code, or unregisters and releases code from the registry. Implicit FORTRAN 77 interface: INTEGER(8) :: kernel

    Arguments

    Type IntentOptional Attributes Name
    type(C_FUNPTR), intent(in) :: kernel

interface

  • public subroutine libxsmm_xmmdispatch(kernel, gemm_precision, m, n, k, lda, ldb, ldc, alpha, beta, flags, prefetch) bind(C, NAME="0")

    Type-generic (unsafe) code dispatch. Implicit FORTRAN 77 interface: INTEGER(4) :: gemm_precision, flags, prefetch INTEGER(4|8) :: m, n, k, lda, ldb, ldc REAL(4|8) :: alpha, beta INTEGER(8) :: kernel

    Arguments

    Type IntentOptional Attributes Name
    type(C_FUNPTR), intent(out) :: kernel
    integer(kind=C_INT), intent(in) :: gemm_precision
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    type(C_PTR), intent(in), VALUE :: lda
    type(C_PTR), intent(in), VALUE :: ldb
    type(C_PTR), intent(in), VALUE :: ldc
    type(C_PTR), intent(in), VALUE :: alpha
    type(C_PTR), intent(in), VALUE :: beta
    type(C_PTR), intent(in), VALUE :: flags
    type(C_PTR), intent(in), VALUE :: prefetch

interface

  • public subroutine libxsmm_xmmdispatch2(kernel, iprec, oprec, m, n, k, lda, ldb, ldc, alpha, beta, flags, prefetch) bind(C, NAME="0")

    Type-generic (unsafe) code dispatch. Implicit FORTRAN 77 interface: INTEGER(4) :: iprec, oprec, flags, prefetch INTEGER(4|8) :: m, n, k, lda, ldb, ldc REAL(4|8) :: alpha, beta INTEGER(8) :: kernel

    Arguments

    Type IntentOptional Attributes Name
    type(C_FUNPTR), intent(out) :: kernel
    integer(kind=C_INT), intent(in) :: iprec
    integer(kind=C_INT), intent(in) :: oprec
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    type(C_PTR), intent(in), VALUE :: lda
    type(C_PTR), intent(in), VALUE :: ldb
    type(C_PTR), intent(in), VALUE :: ldc
    type(C_PTR), intent(in), VALUE :: alpha
    type(C_PTR), intent(in), VALUE :: beta
    type(C_PTR), intent(in), VALUE :: flags
    type(C_PTR), intent(in), VALUE :: prefetch

interface

  • public pure subroutine libxsmm_xmmcall_abc(kernel, a, b, c) bind(C, NAME="0")

    Generic call routine (3-argument form). Implicit FORTRAN 77 interface: REAL(4|8) :: a, b, c INTEGER(8) :: kernel

    Arguments

    Type IntentOptional Attributes Name
    type(C_FUNPTR), intent(in) :: kernel
    type(C_PTR), intent(in), VALUE :: a
    type(C_PTR), intent(in), VALUE :: b
    type(C_PTR), intent(in), VALUE :: c

interface

  • public pure subroutine libxsmm_xmmcall_prf(kernel, a, b, c, pa, pb, pc) bind(C, NAME="0")

    Generic call routine (6-argument form). Implicit FORTRAN 77 interface: REAL(4|8) :: a, b, c, pa, pb, pc INTEGER(8) :: kernel

    Arguments

    Type IntentOptional Attributes Name
    type(C_FUNPTR), intent(in) :: kernel
    type(C_PTR), intent(in), VALUE :: a
    type(C_PTR), intent(in), VALUE :: b
    type(C_PTR), intent(in), VALUE :: c
    type(C_PTR), intent(in), VALUE :: pa
    type(C_PTR), intent(in), VALUE :: pb
    type(C_PTR), intent(in), VALUE :: pc

interface

  • public subroutine libxsmm_xclear(dst, nbytes) bind(C, NAME="0")

    Fill destination with zeros; dst is a raw/binary buffer.

    Arguments

    Type IntentOptional Attributes Name
    type(C_PTR), intent(in), VALUE :: dst
    integer(kind=C_INT), intent(in) :: nbytes

interface

  • public subroutine libxsmm_xrelease(key, keysize) bind(C, NAME="0")

    Remove key-value from code registry and release memory.

    Arguments

    Type IntentOptional Attributes Name
    type(C_PTR), intent(in), VALUE :: key
    integer(kind=C_INT), intent(in) :: keysize

interface

  • public pure subroutine libxsmm_xmatcopy(output, input, typesize, m, n, ldi, ldo) bind(C, NAME="0")

    Matrix-copy (2-dimensional copy) routine. Implicit FORTRAN 77 interface: ARRAY :: input, output INTEGER(4|8) :: m, n, ldi, ldo INTEGER(4) :: typesize

    Arguments

    Type IntentOptional Attributes Name
    type(C_PTR), intent(in), VALUE :: output
    type(C_PTR), intent(in), VALUE :: input
    integer(kind=C_INT), intent(in) :: typesize
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo

interface

  • public pure subroutine libxsmm_xitrans(matrix, typesize, m, n, ldi, ldo) bind(C, NAME="0")

    Transpose a matrix (in-place form). Implicit FORTRAN 77 interface: ARRAY :: matrix INTEGER(4|8) :: m, n, ldi, ldo INTEGER(4) :: typesize

    Arguments

    Type IntentOptional Attributes Name
    type(C_PTR), intent(in), VALUE :: matrix
    integer(kind=C_INT), intent(in) :: typesize
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo

interface

  • public pure subroutine libxsmm_xotrans(output, input, typesize, m, n, ldi, ldo) bind(C, NAME="0")

    Transpose a matrix (out-of-place form). Implicit FORTRAN 77 interface: ARRAY :: input, output INTEGER(4|8) :: m, n, ldi, ldo INTEGER(4) :: typesize

    Arguments

    Type IntentOptional Attributes Name
    type(C_PTR), intent(in), VALUE :: output
    type(C_PTR), intent(in), VALUE :: input
    integer(kind=C_INT), intent(in) :: typesize
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo

interface

  • public pure subroutine libxsmm_matcopy_omp(output, input, typesize, m, n, ldi, ldo) bind(C, NAME="0")

    Matrix copy; MT via libxsmmext (out-of-place form). Implicit FORTRAN 77 interface: ARRAY :: output, input INTEGER(4|8) :: m, n, ldi, ldo INTEGER(4) :: typesize

    Arguments

    Type IntentOptional Attributes Name
    type(C_PTR), intent(in), VALUE :: output
    type(C_PTR), intent(in), VALUE :: input
    integer(kind=C_INT), intent(in) :: typesize
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo

interface

  • public pure subroutine libxsmm_otrans_omp(output, input, typesize, m, n, ldi, ldo) bind(C, NAME="0")

    Matrix transpose; MT via libxsmmext (out-of-place form). Implicit FORTRAN 77 interface: ARRAY :: output, input INTEGER(4|8) :: m, n, ldi, ldo INTEGER(4) :: typesize

    Arguments

    Type IntentOptional Attributes Name
    type(C_PTR), intent(in), VALUE :: output
    type(C_PTR), intent(in), VALUE :: input
    integer(kind=C_INT), intent(in) :: typesize
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo

interface

  • public pure subroutine libxsmm_xgemm_batch_task(iprec, oprec, transa, transb, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b, beta, c, ldc, stride_c, index_stride, index_base, batchsize, batchcheck, tid, ntasks) bind(C, NAME="0")

    Process a series of SMMs (batch). See also libxsmm_gemm_batch/omp. The kind of matrices (a, b, c) depend on index_stride: index_stride==0: stride_ are each scalar strides used to walk the corresponding a, b, or c with each being an array of pointers to the respective matrices. index_stride!=0: stride_ are each scalar strides used to walk the corresponding a, b, or c with each being a pointer to the respective matrix-data. The index_stride is not used otherwise. index_stride is non-zero (smaller than libxsmm_blasint): stride_ indexes determining the start of the corresponding a, b, or c with each being a pointer to the respective matrix-data. The index_stride to walk stride_. Implicit FORTRAN 77 interface: INTEGER(4) :: iprec, oprec CHAR :: transa, transb INTEGER(4|8) :: m, n, k, lda, ldb, ldc REAL(4|8) :: alpha, beta ARRAY :: a, b, c ARRAY/VALUE :: stride_a, stride_b, stride_c INTEGER(4|8) :: index_stride, index_base, batchsize INTEGER(4) :: batchcheck, tid, ntasks

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), intent(in) :: iprec
    integer(kind=C_INT), intent(in) :: oprec
    character, intent(in) :: transa
    character, intent(in) :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    type(C_PTR), intent(in), VALUE :: alpha
    type(C_PTR), intent(in), VALUE :: a
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
    type(C_PTR), intent(in), VALUE :: stride_a

    Arrays of indexes determining the position of a, b, and c operands.

    type(C_PTR), intent(in), VALUE :: b
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
    type(C_PTR), intent(in), VALUE :: stride_b
    type(C_PTR), intent(in), VALUE :: beta
    type(C_PTR), intent(in), VALUE :: c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc
    type(C_PTR), intent(in), VALUE :: stride_c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: index_stride

    Stride (measured in Bytes) used to walk stride_*. In Fortran (usually): index_stride!=0.

    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: index_base

    Determines index-base (1 for one-based indexes).

    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: batchsize

    Number of SMMs. If the size is given as a neg. value, then internal synchronization is omitted.

    integer(kind=C_INT), intent(in) :: batchcheck
    integer(kind=C_INT), intent(in) :: tid

    Task-ID (TID), and number of tasks.

    integer(kind=C_INT), intent(in) :: ntasks

    Task-ID (TID), and number of tasks.

interface

  • public pure subroutine libxsmm_xgemm_batch(iprec, oprec, transa, transb, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b, beta, c, ldc, stride_c, index_stride, index_base, batchsize, batchcheck) bind(C, NAME="0")

    Process a series of SMMs (batch). See also libxsmm_xgemm_batch_task. Implicit FORTRAN 77 interface: INTEGER(4) :: iprec, oprec, batchcheck CHAR :: transa, transb INTEGER(4|8) :: m, n, k, lda, ldb, ldc REAL(4|8) :: alpha, beta ARRAY :: a, b, c ARRAY/VALUE :: stride_a, stride_b, stride_c INTEGER(4|8) :: index_stride, index_base, batchsize

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), intent(in) :: iprec
    integer(kind=C_INT), intent(in) :: oprec
    character, intent(in) :: transa
    character, intent(in) :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    type(C_PTR), intent(in), VALUE :: alpha
    type(C_PTR), intent(in), VALUE :: a
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
    type(C_PTR), intent(in), VALUE :: stride_a
    type(C_PTR), intent(in), VALUE :: b
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
    type(C_PTR), intent(in), VALUE :: stride_b
    type(C_PTR), intent(in), VALUE :: beta
    type(C_PTR), intent(in), VALUE :: c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc
    type(C_PTR), intent(in), VALUE :: stride_c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: index_stride
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: index_base
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: batchsize
    integer(kind=C_INT), intent(in) :: batchcheck

interface

  • public pure subroutine libxsmm_xgemm_batch_omp(iprec, oprec, transa, transb, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b, beta, c, ldc, stride_c, index_stride, index_base, batchsize, batchcheck) bind(C, NAME="0")

    Process a series of SMMs (batch) with OpenMP (libxsmmext). Implicit FORTRAN 77 interface: INTEGER(4) :: iprec, oprec, batchcheck CHAR :: transa, transb INTEGER(4|8) :: m, n, k, lda, ldb, ldc REAL(4|8) :: alpha, beta ARRAY :: a, b, c ARRAY/VALUE :: stride_a, stride_b, stride_c INTEGER(4|8) :: index_stride, index_base, batchsize

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), intent(in) :: iprec
    integer(kind=C_INT), intent(in) :: oprec
    character, intent(in) :: transa
    character, intent(in) :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    type(C_PTR), intent(in), VALUE :: alpha
    type(C_PTR), intent(in), VALUE :: a
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
    type(C_PTR), intent(in), VALUE :: stride_a
    type(C_PTR), intent(in), VALUE :: b
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
    type(C_PTR), intent(in), VALUE :: stride_b
    type(C_PTR), intent(in), VALUE :: beta
    type(C_PTR), intent(in), VALUE :: c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc
    type(C_PTR), intent(in), VALUE :: stride_c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: index_stride
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: index_base
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: batchsize
    integer(kind=C_INT), intent(in) :: batchcheck

interface

  • public pure subroutine libxsmm_matdiff_reduce(output, input) bind(C)

    Reduces input into output such that the difference is maintained or increased (max function). The very first (initial) output should be zeroed (libxsmm_matdiff_clear). Implicit FORTRAN 77 interface: available.

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_MATDIFF_INFO), intent(inout) :: output
    type(LIBXSMM_MATDIFF_INFO), intent(in) :: input

interface

  • public pure subroutine libxsmm_matdiff_clear(info) bind(C)

    Clears the given info-structure, e.g., for the initial reduction-value (libxsmm_matdiff_reduce). Implicit FORTRAN 77 interface: available.

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_MATDIFF_INFO), intent(out) :: info

interface

  • public pure subroutine libxsmm_xhash(hash_seed, key, keysize) bind(C, NAME="0")

    Calculates a hash value for the given array and seed. Routine suitable for FORTRAN 77; keysize in Bytes.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), intent(inout) :: hash_seed
    type(C_PTR), intent(in), VALUE :: key
    integer(kind=C_INT), intent(in) :: keysize

interface

  • public pure subroutine libxsmm_xdiff(diff, a, b, nbytes) bind(C, NAME="0")

    Calculates if there is a difference between two arrays. Routine suitable for FORTRAN 77; size in Bytes.

    Arguments

    Type IntentOptional Attributes Name
    logical(kind=C_BOOL), intent(out) :: diff
    type(C_PTR), intent(in), VALUE :: a
    type(C_PTR), intent(in), VALUE :: b
    integer(kind=C_LONG_LONG), intent(in) :: nbytes

public interface libxsmm_ptr0

  • public function libxsmm_ptr_z0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=C_DOUBLE_COMPLEX), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_c0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=C_FLOAT_COMPLEX), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_d0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_DOUBLE), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_s0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_FLOAT), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_i0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_w0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_SHORT), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_j0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT8_T), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_b0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_l0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_LONG_LONG), intent(in), TARGET :: a

    Return Value type(C_PTR)

public interface libxsmm_ptr1

  • public function libxsmm_ptr_z1(a)

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=C_DOUBLE_COMPLEX), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_c1(a)

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=C_FLOAT_COMPLEX), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_d1(a)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_DOUBLE), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_s1(a)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_FLOAT), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_i1(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_w1(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_SHORT), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_j1(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT8_T), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_b1(a)

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_l1(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_LONG_LONG), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_dmm(a)

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_DMMFUNCTION), intent(in), TARGET :: a(:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_smm(a)

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_SMMFUNCTION), intent(in), TARGET :: a(:)

    Return Value type(C_PTR)

public interface libxsmm_ptr2

  • public function libxsmm_ptr_z2(a)

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=C_DOUBLE_COMPLEX), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_c2(a)

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=C_FLOAT_COMPLEX), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_d2(a)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_DOUBLE), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_s2(a)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_FLOAT), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_i2(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_w2(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_SHORT), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_j2(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT8_T), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_b2(a)

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_l2(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_LONG_LONG), intent(in) :: a(:,:)

    Return Value type(C_PTR)

public interface libxsmm_ptr

  • public function libxsmm_ptr_z0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=C_DOUBLE_COMPLEX), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_c0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=C_FLOAT_COMPLEX), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_d0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_DOUBLE), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_s0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_FLOAT), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_i0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_w0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_SHORT), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_j0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT8_T), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_b0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_l0(a)

    Determines the C-address of the given array.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_LONG_LONG), intent(in), TARGET :: a

    Return Value type(C_PTR)

  • public function libxsmm_ptr_z1(a)

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=C_DOUBLE_COMPLEX), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_c1(a)

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=C_FLOAT_COMPLEX), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_d1(a)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_DOUBLE), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_s1(a)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_FLOAT), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_i1(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_w1(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_SHORT), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_j1(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT8_T), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_b1(a)

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_l1(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_LONG_LONG), intent(in), TARGET :: a(*)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_z2(a)

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=C_DOUBLE_COMPLEX), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_c2(a)

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=C_FLOAT_COMPLEX), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_d2(a)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_DOUBLE), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_s2(a)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_FLOAT), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_i2(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_w2(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_SHORT), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_j2(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT8_T), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_b2(a)

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_l2(a)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_LONG_LONG), intent(in) :: a(:,:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_dmm(a)

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_DMMFUNCTION), intent(in), TARGET :: a(:)

    Return Value type(C_PTR)

  • public function libxsmm_ptr_smm(a)

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_SMMFUNCTION), intent(in), TARGET :: a(:)

    Return Value type(C_PTR)

public interface libxsmm_release_mmkernel

Deallocates JIT'ted code, or unregisters and releases code from registry.

  • public subroutine libxsmm_release_dmmkernel(kernel)

    Deallocate JIT'ted code created by libxsmm_create routines. To unregister code generated with libxsmm_dispatch is unnecessary.

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_DMMFUNCTION), intent(in) :: kernel
  • public subroutine libxsmm_release_smmkernel(kernel)

    Deallocate JIT'ted code created by libxsmm_create routines. To unregister code generated with libxsmm_dispatch is unnecessary.

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_SMMFUNCTION), intent(in) :: kernel

public interface libxsmm_mmdispatch

Construct JIT-code depending on given argument set.

  • public subroutine libxsmm_dmmdispatch(kernel, m, n, k, lda, ldb, ldc, alpha, beta, flags, prefetch)

    Query or JIT-generate an SMM-kernel (double-precision).

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_DMMFUNCTION), intent(out) :: kernel
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: lda
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: ldb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: ldc
    real(kind=C_DOUBLE), intent(in), optional, TARGET :: alpha
    real(kind=C_DOUBLE), intent(in), optional, TARGET :: beta
    integer(kind=C_INT), intent(in), optional, TARGET :: flags
    integer(kind=C_INT), intent(in), optional, TARGET :: prefetch
  • public subroutine libxsmm_smmdispatch(kernel, m, n, k, lda, ldb, ldc, alpha, beta, flags, prefetch)

    Query or JIT-generate an SMM-kernel (single-precision).

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_SMMFUNCTION), intent(out) :: kernel
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: lda
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: ldb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: ldc
    real(kind=C_FLOAT), intent(in), optional, TARGET :: alpha
    real(kind=C_FLOAT), intent(in), optional, TARGET :: beta
    integer(kind=C_INT), intent(in), optional, TARGET :: flags
    integer(kind=C_INT), intent(in), optional, TARGET :: prefetch

public interface libxsmm_dispatch

Construct JIT-code depending on given argument set.

  • public subroutine libxsmm_dmmdispatch(kernel, m, n, k, lda, ldb, ldc, alpha, beta, flags, prefetch)

    Query or JIT-generate an SMM-kernel (double-precision).

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_DMMFUNCTION), intent(out) :: kernel
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: lda
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: ldb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: ldc
    real(kind=C_DOUBLE), intent(in), optional, TARGET :: alpha
    real(kind=C_DOUBLE), intent(in), optional, TARGET :: beta
    integer(kind=C_INT), intent(in), optional, TARGET :: flags
    integer(kind=C_INT), intent(in), optional, TARGET :: prefetch
  • public subroutine libxsmm_smmdispatch(kernel, m, n, k, lda, ldb, ldc, alpha, beta, flags, prefetch)

    Query or JIT-generate an SMM-kernel (single-precision).

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_SMMFUNCTION), intent(out) :: kernel
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: lda
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: ldb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: ldc
    real(kind=C_FLOAT), intent(in), optional, TARGET :: alpha
    real(kind=C_FLOAT), intent(in), optional, TARGET :: beta
    integer(kind=C_INT), intent(in), optional, TARGET :: flags
    integer(kind=C_INT), intent(in), optional, TARGET :: prefetch

public interface libxsmm_mmavailable

Check if a function is available (LIBXSMM_?MMFUNCTION).

  • public function libxsmm_dmmavailable(kernel)

    Checks if the given kernel was generated. JIT code is guaranteed to be generated if JIT support was enabled at build-time of the library (default). This overload belongs to libxsmm_(mm)available.

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_DMMFUNCTION), intent(in) :: kernel

    Return Value logical

  • public function libxsmm_smmavailable(kernel)

    Checks if the given kernel was generated. JIT code is guaranteed to be generated if JIT support was enabled at build-time of the library (default). This overload belongs to libxsmm_(mm)available.

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_SMMFUNCTION), intent(in) :: kernel

    Return Value logical

public interface libxsmm_available

Check if a function is available (LIBXSMM_?MMFUNCTION).

  • public function libxsmm_smmavailable(kernel)

    Checks if the given kernel was generated. JIT code is guaranteed to be generated if JIT support was enabled at build-time of the library (default). This overload belongs to libxsmm_(mm)available.

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_SMMFUNCTION), intent(in) :: kernel

    Return Value logical

  • public function libxsmm_dmmavailable(kernel)

    Checks if the given kernel was generated. JIT code is guaranteed to be generated if JIT support was enabled at build-time of the library (default). This overload belongs to libxsmm_(mm)available.

    Arguments

    Type IntentOptional Attributes Name
    type(LIBXSMM_DMMFUNCTION), intent(in) :: kernel

    Return Value logical

public interface libxsmm_dgemm

Overloaded GEMM routines (double-precision).

  • public pure subroutine libxsmm_dgemm0(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Auto-dispatched general dense MM (double-precision). This overload belongs to libxsmm_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in) :: a
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_DOUBLE), intent(in) :: b
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_DOUBLE), intent(in), optional :: beta
    real(kind=C_DOUBLE), intent(inout) :: c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_dgemm1(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Auto-dispatched general dense MM (double-precision). This overload belongs to libxsmm_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in) :: a(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_DOUBLE), intent(in) :: b(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_DOUBLE), intent(in), optional :: beta
    real(kind=C_DOUBLE), intent(inout) :: c(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_dgemm2(transa, transb, m, n, k, a, b, c, alpha, beta)

    Auto-dispatched general dense MM (double-precision). This overload belongs to libxsmm_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in) :: a(m,*)
    real(kind=C_DOUBLE), intent(in) :: b(k,*)
    real(kind=C_DOUBLE), intent(inout) :: c(m,*)
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in), optional :: beta
  • public pure subroutine libxsmm_dgemm3(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Auto-dispatched general dense MM (double-precision). This overload belongs to libxsmm_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in) :: a(lda,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
    real(kind=C_DOUBLE), intent(in) :: b(ldb,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
    real(kind=C_DOUBLE), intent(in), optional :: beta
    real(kind=C_DOUBLE), intent(inout) :: c(ldc,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc

public interface libxsmm_sgemm

Overloaded GEMM routines (single-precision).

  • public pure subroutine libxsmm_sgemm0(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Auto-dispatched general dense MM (single-precision). This overload belongs to libxsmm_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in) :: a
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_FLOAT), intent(in) :: b
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_FLOAT), intent(in), optional :: beta
    real(kind=C_FLOAT), intent(inout) :: c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_sgemm1(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Auto-dispatched general dense MM (single-precision). This overload belongs to libxsmm_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in) :: a(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_FLOAT), intent(in) :: b(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_FLOAT), intent(in), optional :: beta
    real(kind=C_FLOAT), intent(inout) :: c(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_sgemm2(transa, transb, m, n, k, a, b, c, alpha, beta)

    Auto-dispatched general dense MM (single-precision). This overload belongs to libxsmm_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in) :: a(m,*)
    real(kind=C_FLOAT), intent(in) :: b(k,*)
    real(kind=C_FLOAT), intent(inout) :: c(m,*)
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in), optional :: beta

public interface libxsmm_gemm

Overloaded GEMM routines.

  • public pure subroutine libxsmm_dgemm0(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Auto-dispatched general dense MM (double-precision). This overload belongs to libxsmm_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in) :: a
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_DOUBLE), intent(in) :: b
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_DOUBLE), intent(in), optional :: beta
    real(kind=C_DOUBLE), intent(inout) :: c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_dgemm1(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Auto-dispatched general dense MM (double-precision). This overload belongs to libxsmm_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in) :: a(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_DOUBLE), intent(in) :: b(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_DOUBLE), intent(in), optional :: beta
    real(kind=C_DOUBLE), intent(inout) :: c(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_dgemm2(transa, transb, m, n, k, a, b, c, alpha, beta)

    Auto-dispatched general dense MM (double-precision). This overload belongs to libxsmm_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in) :: a(m,*)
    real(kind=C_DOUBLE), intent(in) :: b(k,*)
    real(kind=C_DOUBLE), intent(inout) :: c(m,*)
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in), optional :: beta
  • public pure subroutine libxsmm_dgemm3(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Auto-dispatched general dense MM (double-precision). This overload belongs to libxsmm_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in) :: a(lda,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
    real(kind=C_DOUBLE), intent(in) :: b(ldb,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
    real(kind=C_DOUBLE), intent(in), optional :: beta
    real(kind=C_DOUBLE), intent(inout) :: c(ldc,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc
  • public pure subroutine libxsmm_sgemm0(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Auto-dispatched general dense MM (single-precision). This overload belongs to libxsmm_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in) :: a
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_FLOAT), intent(in) :: b
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_FLOAT), intent(in), optional :: beta
    real(kind=C_FLOAT), intent(inout) :: c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_sgemm1(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Auto-dispatched general dense MM (single-precision). This overload belongs to libxsmm_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in) :: a(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_FLOAT), intent(in) :: b(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_FLOAT), intent(in), optional :: beta
    real(kind=C_FLOAT), intent(inout) :: c(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_sgemm2(transa, transb, m, n, k, a, b, c, alpha, beta)

    Auto-dispatched general dense MM (single-precision). This overload belongs to libxsmm_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in) :: a(m,*)
    real(kind=C_FLOAT), intent(in) :: b(k,*)
    real(kind=C_FLOAT), intent(inout) :: c(m,*)
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in), optional :: beta
  • public pure subroutine libxsmm_sgemm3(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Auto-dispatched general dense MM (single-precision). This overload belongs to libxsmm_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in) :: a(lda,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
    real(kind=C_FLOAT), intent(in) :: b(ldb,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
    real(kind=C_FLOAT), intent(in), optional :: beta
    real(kind=C_FLOAT), intent(inout) :: c(ldc,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc

public interface libxsmm_blas_dgemm

Overloaded BLAS GEMM routines (double-precision).

  • public pure subroutine libxsmm_blas_dgemm0(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(d)gemm. This overload belongs to libxsmm_blas_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in) :: a
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_DOUBLE), intent(in) :: b
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_DOUBLE), intent(in), optional :: beta
    real(kind=C_DOUBLE), intent(inout) :: c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_blas_dgemm1(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(d)gemm. This overload belongs to libxsmm_blas_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in) :: a(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_DOUBLE), intent(in) :: b(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_DOUBLE), intent(in), optional :: beta
    real(kind=C_DOUBLE), intent(inout) :: c(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_blas_dgemm2(transa, transb, m, n, k, a, b, c, alpha, beta)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(d)gemm. This overload belongs to libxsmm_blas_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in) :: a(m,*)
    real(kind=C_DOUBLE), intent(in) :: b(k,*)
    real(kind=C_DOUBLE), intent(inout) :: c(m,*)
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in), optional :: beta
  • public pure subroutine libxsmm_blas_dgemm3(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(d)gemm. This overload belongs to libxsmm_blas_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in) :: a(lda,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
    real(kind=C_DOUBLE), intent(in) :: b(ldb,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
    real(kind=C_DOUBLE), intent(in), optional :: beta
    real(kind=C_DOUBLE), intent(inout) :: c(ldc,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc

public interface libxsmm_blas_sgemm

Overloaded BLAS GEMM routines (single-precision).

  • public pure subroutine libxsmm_blas_sgemm0(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(s)gemm. This overload belongs to libxsmm_blas_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in) :: a
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_FLOAT), intent(in) :: b
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_FLOAT), intent(in), optional :: beta
    real(kind=C_FLOAT), intent(inout) :: c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_blas_sgemm1(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(s)gemm. This overload belongs to libxsmm_blas_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in) :: a(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_FLOAT), intent(in) :: b(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_FLOAT), intent(in), optional :: beta
    real(kind=C_FLOAT), intent(inout) :: c(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_blas_sgemm2(transa, transb, m, n, k, a, b, c, alpha, beta)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(s)gemm. This overload belongs to libxsmm_blas_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in) :: a(m,*)
    real(kind=C_FLOAT), intent(in) :: b(k,*)
    real(kind=C_FLOAT), intent(inout) :: c(m,*)
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in), optional :: beta
  • public pure subroutine libxsmm_blas_sgemm3(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(s)gemm. This overload belongs to libxsmm_blas_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in) :: a(lda,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
    real(kind=C_FLOAT), intent(in) :: b(ldb,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
    real(kind=C_FLOAT), intent(in), optional :: beta
    real(kind=C_FLOAT), intent(inout) :: c(ldc,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc

public interface libxsmm_blas_gemm

Overloaded BLAS GEMM routines (single/double-precision).

  • public pure subroutine libxsmm_blas_dgemm0(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(d)gemm. This overload belongs to libxsmm_blas_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in) :: a
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_DOUBLE), intent(in) :: b
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_DOUBLE), intent(in), optional :: beta
    real(kind=C_DOUBLE), intent(inout) :: c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_blas_dgemm1(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(d)gemm. This overload belongs to libxsmm_blas_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in) :: a(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_DOUBLE), intent(in) :: b(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_DOUBLE), intent(in), optional :: beta
    real(kind=C_DOUBLE), intent(inout) :: c(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_blas_dgemm2(transa, transb, m, n, k, a, b, c, alpha, beta)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(d)gemm. This overload belongs to libxsmm_blas_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in) :: a(m,*)
    real(kind=C_DOUBLE), intent(in) :: b(k,*)
    real(kind=C_DOUBLE), intent(inout) :: c(m,*)
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in), optional :: beta
  • public pure subroutine libxsmm_blas_dgemm3(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(d)gemm. This overload belongs to libxsmm_blas_(d)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_DOUBLE), intent(in), optional :: alpha
    real(kind=C_DOUBLE), intent(in) :: a(lda,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
    real(kind=C_DOUBLE), intent(in) :: b(ldb,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
    real(kind=C_DOUBLE), intent(in), optional :: beta
    real(kind=C_DOUBLE), intent(inout) :: c(ldc,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc
  • public pure subroutine libxsmm_blas_sgemm0(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(s)gemm. This overload belongs to libxsmm_blas_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in) :: a
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_FLOAT), intent(in) :: b
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_FLOAT), intent(in), optional :: beta
    real(kind=C_FLOAT), intent(inout) :: c
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_blas_sgemm1(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(s)gemm. This overload belongs to libxsmm_blas_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in) :: a(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
    real(kind=C_FLOAT), intent(in) :: b(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
    real(kind=C_FLOAT), intent(in), optional :: beta
    real(kind=C_FLOAT), intent(inout) :: c(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
  • public pure subroutine libxsmm_blas_sgemm2(transa, transb, m, n, k, a, b, c, alpha, beta)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(s)gemm. This overload belongs to libxsmm_blas_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in) :: a(m,*)
    real(kind=C_FLOAT), intent(in) :: b(k,*)
    real(kind=C_FLOAT), intent(inout) :: c(m,*)
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in), optional :: beta
  • public pure subroutine libxsmm_blas_sgemm3(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

    Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(s)gemm. This overload belongs to libxsmm_blas_(s)gemm.

    Arguments

    Type IntentOptional Attributes Name
    character, intent(in), optional :: transa
    character, intent(in), optional :: transb
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
    real(kind=C_FLOAT), intent(in), optional :: alpha
    real(kind=C_FLOAT), intent(in) :: a(lda,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
    real(kind=C_FLOAT), intent(in) :: b(ldb,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
    real(kind=C_FLOAT), intent(in), optional :: beta
    real(kind=C_FLOAT), intent(inout) :: c(ldc,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc

public interface libxsmm_matcopy

Overloaded MATCOPY routines (2d-copy).

  • public pure subroutine libxsmm_matcopy_p0(output, input, typesize, m, n, ldi, ldo)

    Matrix-copy (2-dimensional copy) routine. If the input (optional) is not present, the routine is used to zero-fill the out-matrix.

    Arguments

    Type IntentOptional Attributes Name
    type(C_PTR), intent(in) :: output
    type(C_PTR), intent(in), optional :: input
    integer(kind=C_INT), intent(in) :: typesize
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo
  • public subroutine libxsmm_matcopy_d1(output, input, m, n, ldi, ldo)

    Matrix-copy (2-dimensional copy) routine (DP/rank-1).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_DOUBLE), intent(out), TARGET :: output(*)
    real(kind=C_DOUBLE), intent(in), optional, TARGET :: input(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo
  • public subroutine libxsmm_matcopy_d2(output, input, m, n, ldi, ldo)

    Matrix-copy (2-dimensional copy) routine (DP/rank-2).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_DOUBLE), intent(out), TARGET :: output(ldo,*)
    real(kind=C_DOUBLE), intent(in), optional, TARGET :: input(ldi,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo
  • public subroutine libxsmm_matcopy_s1(output, input, m, n, ldi, ldo)

    Matrix-copy (2-dimensional copy) routine (SP/rank-1).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_FLOAT), intent(out), TARGET :: output(*)
    real(kind=C_FLOAT), intent(in), optional, TARGET :: input(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo
  • public subroutine libxsmm_matcopy_s2(output, input, m, n, ldi, ldo)

    Matrix-copy (2-dimensional copy) routine (SP/rank-2).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_FLOAT), intent(out), TARGET :: output(ldo,*)
    real(kind=C_FLOAT), intent(in), optional, TARGET :: input(ldi,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo

public interface libxsmm_itrans

Overloaded TRANSPOSE routines (in-place form).

  • public pure subroutine libxsmm_itrans_p0(matrix, typesize, m, n, ldi, ldo)

    Transpose a matrix (in-place form).

    Arguments

    Type IntentOptional Attributes Name
    type(C_PTR), intent(in) :: matrix
    integer(kind=C_INT), intent(in) :: typesize
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo
  • public subroutine libxsmm_itrans_d1(matrix, m, n, ldi, ldo)

    Transpose a matrix (in-place form, DP/rank-1).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_DOUBLE), intent(inout), TARGET :: matrix(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo
  • public subroutine libxsmm_itrans_d2(matrix, m, n, ld)

    Transpose a matrix (in-place form, DP/rank-2).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_DOUBLE), intent(inout), TARGET :: matrix(ld,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ld
  • public subroutine libxsmm_itrans_s1(matrix, m, n, ldi, ldo)

    Transpose a matrix (in-place form, SP/rank-1).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_FLOAT), intent(inout), TARGET :: matrix(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo
  • public subroutine libxsmm_itrans_s2(matrix, m, n, ld)

    Transpose a matrix (in-place form, SP/rank-2).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_FLOAT), intent(inout), TARGET :: matrix(ld,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ld

public interface libxsmm_otrans

Overloaded TRANSPOSE routines (out-of-place form).

  • public pure subroutine libxsmm_otrans_p0(output, input, typesize, m, n, ldi, ldo)

    Transpose a matrix (out-of-place form).

    Arguments

    Type IntentOptional Attributes Name
    type(C_PTR), intent(in) :: output
    type(C_PTR), intent(in) :: input
    integer(kind=C_INT), intent(in) :: typesize
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo
  • public subroutine libxsmm_otrans_d1(output, input, m, n, ldi, ldo)

    Transpose a matrix (out-of-place form, DP/rank-1).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_DOUBLE), intent(out), TARGET :: output(*)
    real(kind=C_DOUBLE), intent(in), TARGET :: input(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo
  • public subroutine libxsmm_otrans_d2(output, input, m, n, ldi, ldo)

    Transpose a matrix (out-of-place form, DP/rank-2).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_DOUBLE), intent(out), TARGET :: output(ldo,*)
    real(kind=C_DOUBLE), intent(in), TARGET :: input(ldi,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo
  • public subroutine libxsmm_otrans_s1(output, input, m, n, ldi, ldo)

    Transpose a matrix (out-of-place form, SP/rank-1).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_FLOAT), intent(out), TARGET :: output(*)
    real(kind=C_FLOAT), intent(in), TARGET :: input(*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo
  • public subroutine libxsmm_otrans_s2(output, input, m, n, ldi, ldo)

    Transpose a matrix (out-of-place form, SP/rank-2).

    Arguments

    Type IntentOptional Attributes Name
    real(kind=C_FLOAT), intent(out), TARGET :: output(ldo,*)
    real(kind=C_FLOAT), intent(in), TARGET :: input(ldi,*)
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
    integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo

public interface libxsmm_hash

Calculate a hash value for a given key value (binary blob). Conceptually pure, but C_LOC may be (incorrectly) impure.

  • public function libxsmm_hash_char(key, seed)

    Calculates a hash value for the given array and seed. FORTRAN 77: see libxsmm_xhash

    Arguments

    Type IntentOptional Attributes Name
    character, INTENT(IN)$CONTIGUOUS :: key(:)
    integer(kind=C_INT), intent(in) :: seed

    Return Value integer(kind=C_INT)

  • public function libxsmm_hash_i8(key, seed)

    Calculates a hash value for the given array and seed. FORTRAN 77: see libxsmm_xhash

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT8_T), INTENT(IN)$CONTIGUOUS :: key(:)
    integer(kind=C_INT), intent(in) :: seed

    Return Value integer(kind=C_INT)

  • public function libxsmm_hash_i32(key, seed)

    Calculates a hash value for the given array and seed. FORTRAN 77: see libxsmm_xhash

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), INTENT(IN)$CONTIGUOUS :: key(:)
    integer(kind=C_INT), intent(in) :: seed

    Return Value integer(kind=C_INT)

  • public function libxsmm_hash_i64(key, seed)

    Calculates a hash value for the given array and seed. FORTRAN 77: see libxsmm_xhash

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_LONG_LONG), INTENT(IN)$CONTIGUOUS :: key(:)
    integer(kind=C_INT), intent(in) :: seed

    Return Value integer(kind=C_INT)

public interface libxsmm_diff

Calculate whether there is a difference between two series of items. Conceptually pure, but C_LOC may be (incorrectly) impure.

  • public function libxsmm_diff_char(a, b)

    Calculates if there is a difference between two arrays. FORTRAN 77: see libxsmm_xdiff

    Arguments

    Type IntentOptional Attributes Name
    character, INTENT(IN)$CONTIGUOUS :: a(:)
    character, INTENT(IN)$CONTIGUOUS :: b(:)

    Return Value logical(kind=C_BOOL)

  • public function libxsmm_diff_i8(a, b)

    Calculates if there is a difference between two arrays. FORTRAN 77: see libxsmm_xdiff

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT8_T), INTENT(IN)$CONTIGUOUS :: a(:)
    integer(kind=C_INT8_T), INTENT(IN)$CONTIGUOUS :: b(:)

    Return Value logical(kind=C_BOOL)

  • public function libxsmm_diff_i32(a, b)

    Calculates if there is a difference between two arrays. FORTRAN 77: see libxsmm_xdiff

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_INT), INTENT(IN)$CONTIGUOUS :: a(:)
    integer(kind=C_INT), INTENT(IN)$CONTIGUOUS :: b(:)

    Return Value logical(kind=C_BOOL)

  • public function libxsmm_diff_i64(a, b)

    Calculates if there is a difference between two arrays. FORTRAN 77: see libxsmm_xdiff

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=C_LONG_LONG), INTENT(IN)$CONTIGUOUS :: a(:)
    integer(kind=C_LONG_LONG), INTENT(IN)$CONTIGUOUS :: b(:)

    Return Value logical(kind=C_BOOL)


Abstract Interfaces

abstract interface

Generic function types with certain arity.

  • public pure subroutine LIBXSMM_FUNCTION3(a, b, c) bind(C)

    Arguments

    Type IntentOptional Attributes Name
    type(C_PTR), intent(in), VALUE :: a
    type(C_PTR), intent(in), VALUE :: b
    type(C_PTR), intent(in), VALUE :: c

abstract interface

Generic function types with certain arity.

  • public pure subroutine LIBXSMM_FUNCTION6(a, b, c, pa, pb, pc) bind(C)

    Arguments

    Type IntentOptional Attributes Name
    type(C_PTR), intent(in), VALUE :: a
    type(C_PTR), intent(in), VALUE :: b
    type(C_PTR), intent(in), VALUE :: c
    type(C_PTR), intent(in), VALUE :: pa
    type(C_PTR), intent(in), VALUE :: pb
    type(C_PTR), intent(in), VALUE :: pc

Derived Types

type, public ::  LIBXSMM_DMMFUNCTION

Generic function type (double-precision).

Components

Type Visibility Attributes Name Initial
type(C_FUNPTR), public :: handle = C_NULL_FUNPTR

type, public ::  LIBXSMM_SMMFUNCTION

Generic function type (single-precision).

Components

Type Visibility Attributes Name Initial
type(C_FUNPTR), public :: handle = C_NULL_FUNPTR

type, public ::  LIBXSMM_WIMMFUNCTION

Generic function type (low-precision)

Components

Type Visibility Attributes Name Initial
type(C_FUNPTR), public :: handle = C_NULL_FUNPTR

type, public ::  LIBXSMM_MATDIFF_INFO

Structure of differences with matrix norms according to http://www.netlib.org/lapack/lug/node75.html).

Components

Type Visibility Attributes Name Initial
real(kind=C_DOUBLE), public :: norm1_abs

One-norm

real(kind=C_DOUBLE), public :: norm1_rel

One-norm

real(kind=C_DOUBLE), public :: normi_abs

Infinity-norm

real(kind=C_DOUBLE), public :: normi_rel

Infinity-norm

real(kind=C_DOUBLE), public :: normf_rel

Froebenius-norm

real(kind=C_DOUBLE), public :: linf_abs

Maximum difference, L2-norm (absolute and relative), and R-squared.

real(kind=C_DOUBLE), public :: linf_rel

Maximum difference, L2-norm (absolute and relative), and R-squared.

real(kind=C_DOUBLE), public :: l2_abs

Maximum difference, L2-norm (absolute and relative), and R-squared.

real(kind=C_DOUBLE), public :: l2_rel

Maximum difference, L2-norm (absolute and relative), and R-squared.

real(kind=C_DOUBLE), public :: rsq

Maximum difference, L2-norm (absolute and relative), and R-squared.

real(kind=C_DOUBLE), public :: l1_ref

Statistics (reference): sum/l1, minimum, maximum, arithmetic average, and variance.

real(kind=C_DOUBLE), public :: min_ref

Statistics (reference): sum/l1, minimum, maximum, arithmetic average, and variance.

real(kind=C_DOUBLE), public :: max_ref

Statistics (reference): sum/l1, minimum, maximum, arithmetic average, and variance.

real(kind=C_DOUBLE), public :: avg_ref

Statistics (reference): sum/l1, minimum, maximum, arithmetic average, and variance.

real(kind=C_DOUBLE), public :: var_ref

Statistics (reference): sum/l1, minimum, maximum, arithmetic average, and variance.

real(kind=C_DOUBLE), public :: l1_tst

Statistics (test): sum/l1, minimum, maximum, arithmetic average, and variance.

real(kind=C_DOUBLE), public :: min_tst

Statistics (test): sum/l1, minimum, maximum, arithmetic average, and variance.

real(kind=C_DOUBLE), public :: max_tst

Statistics (test): sum/l1, minimum, maximum, arithmetic average, and variance.

real(kind=C_DOUBLE), public :: avg_tst

Statistics (test): sum/l1, minimum, maximum, arithmetic average, and variance.

real(kind=C_DOUBLE), public :: var_tst

Statistics (test): sum/l1, minimum, maximum, arithmetic average, and variance.

real(kind=C_DOUBLE), public :: v_ref

Values(v_ref, v_tst) and location(m, n) of largest linf_abs.

real(kind=C_DOUBLE), public :: v_tst

Values(v_ref, v_tst) and location(m, n) of largest linf_abs.

integer(kind=LIBXSMM_BLASINT_KIND), public :: m

If r is non-zero (i is not negative), values (v_ref, v_tst), and location (m, n) stem from the i-th reduction (r calls of libxsmm_matdiff_reduce) of the largest difference (libxsmm_matdiff_epsilon).

integer(kind=LIBXSMM_BLASINT_KIND), public :: n

If r is non-zero (i is not negative), values (v_ref, v_tst), and location (m, n) stem from the i-th reduction (r calls of libxsmm_matdiff_reduce) of the largest difference (libxsmm_matdiff_epsilon).

integer(kind=LIBXSMM_BLASINT_KIND), public :: i

If r is non-zero (i is not negative), values (v_ref, v_tst), and location (m, n) stem from the i-th reduction (r calls of libxsmm_matdiff_reduce) of the largest difference (libxsmm_matdiff_epsilon).

integer(kind=LIBXSMM_BLASINT_KIND), public :: r

If r is non-zero (i is not negative), values (v_ref, v_tst), and location (m, n) stem from the i-th reduction (r calls of libxsmm_matdiff_reduce) of the largest difference (libxsmm_matdiff_epsilon).


Functions

public function libxsmm_get_target_arch()

Returns the name of the target architecture as determined by the CPUID flags, as set by the libxsmm_get_target_arch* functions, or as set by the LIBXSMM_TARGET environment variable.

Arguments

None

Return Value character, POINTER, (:)

public pure function libxsmm_ptr_null()

Returns C_NULL_PTR.

Arguments

None

Return Value type(C_PTR)

public function libxsmm_ptr_z0(a)

Determines the C-address of the given array.

Arguments

Type IntentOptional Attributes Name
complex(kind=C_DOUBLE_COMPLEX), intent(in), TARGET :: a

Return Value type(C_PTR)

public function libxsmm_ptr_z1(a)

Arguments

Type IntentOptional Attributes Name
complex(kind=C_DOUBLE_COMPLEX), intent(in), TARGET :: a(*)

Return Value type(C_PTR)

public function libxsmm_ptr_z2(a)

Arguments

Type IntentOptional Attributes Name
complex(kind=C_DOUBLE_COMPLEX), intent(in) :: a(:,:)

Return Value type(C_PTR)

public function libxsmm_ptr_c0(a)

Determines the C-address of the given array.

Arguments

Type IntentOptional Attributes Name
complex(kind=C_FLOAT_COMPLEX), intent(in), TARGET :: a

Return Value type(C_PTR)

public function libxsmm_ptr_c1(a)

Arguments

Type IntentOptional Attributes Name
complex(kind=C_FLOAT_COMPLEX), intent(in), TARGET :: a(*)

Return Value type(C_PTR)

public function libxsmm_ptr_c2(a)

Arguments

Type IntentOptional Attributes Name
complex(kind=C_FLOAT_COMPLEX), intent(in) :: a(:,:)

Return Value type(C_PTR)

public function libxsmm_ptr_d0(a)

Determines the C-address of the given array.

Arguments

Type IntentOptional Attributes Name
real(kind=C_DOUBLE), intent(in), TARGET :: a

Return Value type(C_PTR)

public function libxsmm_ptr_d1(a)

Arguments

Type IntentOptional Attributes Name
real(kind=C_DOUBLE), intent(in), TARGET :: a(*)

Return Value type(C_PTR)

public function libxsmm_ptr_d2(a)

Arguments

Type IntentOptional Attributes Name
real(kind=C_DOUBLE), intent(in) :: a(:,:)

Return Value type(C_PTR)

public function libxsmm_ptr_s0(a)

Determines the C-address of the given array.

Arguments

Type IntentOptional Attributes Name
real(kind=C_FLOAT), intent(in), TARGET :: a

Return Value type(C_PTR)

public function libxsmm_ptr_s1(a)

Arguments

Type IntentOptional Attributes Name
real(kind=C_FLOAT), intent(in), TARGET :: a(*)

Return Value type(C_PTR)

public function libxsmm_ptr_s2(a)

Arguments

Type IntentOptional Attributes Name
real(kind=C_FLOAT), intent(in) :: a(:,:)

Return Value type(C_PTR)

public function libxsmm_ptr_i0(a)

Determines the C-address of the given array.

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT), intent(in), TARGET :: a

Return Value type(C_PTR)

public function libxsmm_ptr_i1(a)

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT), intent(in), TARGET :: a(*)

Return Value type(C_PTR)

public function libxsmm_ptr_i2(a)

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT), intent(in) :: a(:,:)

Return Value type(C_PTR)

public function libxsmm_ptr_w0(a)

Determines the C-address of the given array.

Arguments

Type IntentOptional Attributes Name
integer(kind=C_SHORT), intent(in), TARGET :: a

Return Value type(C_PTR)

public function libxsmm_ptr_w1(a)

Arguments

Type IntentOptional Attributes Name
integer(kind=C_SHORT), intent(in), TARGET :: a(*)

Return Value type(C_PTR)

public function libxsmm_ptr_w2(a)

Arguments

Type IntentOptional Attributes Name
integer(kind=C_SHORT), intent(in) :: a(:,:)

Return Value type(C_PTR)

public function libxsmm_ptr_j0(a)

Determines the C-address of the given array.

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT8_T), intent(in), TARGET :: a

Return Value type(C_PTR)

public function libxsmm_ptr_j1(a)

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT8_T), intent(in), TARGET :: a(*)

Return Value type(C_PTR)

public function libxsmm_ptr_j2(a)

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT8_T), intent(in) :: a(:,:)

Return Value type(C_PTR)

public function libxsmm_ptr_b0(a)

Determines the C-address of the given array.

Arguments

Type IntentOptional Attributes Name
character, intent(in), TARGET :: a

Return Value type(C_PTR)

public function libxsmm_ptr_b1(a)

Arguments

Type IntentOptional Attributes Name
character, intent(in), TARGET :: a(*)

Return Value type(C_PTR)

public function libxsmm_ptr_b2(a)

Arguments

Type IntentOptional Attributes Name
character, intent(in) :: a(:,:)

Return Value type(C_PTR)

public function libxsmm_ptr_l0(a)

Determines the C-address of the given array.

Arguments

Type IntentOptional Attributes Name
integer(kind=C_LONG_LONG), intent(in), TARGET :: a

Return Value type(C_PTR)

public function libxsmm_ptr_l1(a)

Arguments

Type IntentOptional Attributes Name
integer(kind=C_LONG_LONG), intent(in), TARGET :: a(*)

Return Value type(C_PTR)

public function libxsmm_ptr_l2(a)

Arguments

Type IntentOptional Attributes Name
integer(kind=C_LONG_LONG), intent(in) :: a(:,:)

Return Value type(C_PTR)

public function libxsmm_ptr_dmm(a)

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_DMMFUNCTION), intent(in), TARGET :: a(:)

Return Value type(C_PTR)

public function libxsmm_ptr_smm(a)

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_SMMFUNCTION), intent(in), TARGET :: a(:)

Return Value type(C_PTR)

public function libxsmm_dmmavailable(kernel)

Checks if the given kernel was generated. JIT code is guaranteed to be generated if JIT support was enabled at build-time of the library (default). This overload belongs to libxsmm_(mm)available.

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_DMMFUNCTION), intent(in) :: kernel

Return Value logical

public function libxsmm_smmavailable(kernel)

Checks if the given kernel was generated. JIT code is guaranteed to be generated if JIT support was enabled at build-time of the library (default). This overload belongs to libxsmm_(mm)available.

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_SMMFUNCTION), intent(in) :: kernel

Return Value logical

public function libxsmm_xregister(key, keysize, valsize, valinit)

Register user-defined key-value; value can be queried (libxsmm_xdispatch). Since the key-type is unknown to LIBXSMM, the key must be binary reproducible, i.e., a structured type (can be padded) must be initialized like a binary blob (libxsmm_xclear) followed by an element-wise initialization. The size of the key is limited (see documentation). The given value is copied by LIBXSMM and can be initialized prior to registration or whenever queried. Registered data is released when the program terminates but can be also released if needed (libxsmm_xrelease), .e.g., in case of a larger value reusing the same key.

Arguments

Type IntentOptional Attributes Name
type(C_PTR), intent(in), VALUE :: key
integer(kind=C_INT), intent(in) :: keysize
integer(kind=C_INT), intent(in) :: valsize
type(C_PTR), intent(in), optional :: valinit

Return Value type(C_PTR)

public function libxsmm_xdispatch(key, keysize)

Query user-defined value from LIBXSMM's code registry.

Arguments

Type IntentOptional Attributes Name
type(C_PTR), intent(in), VALUE :: key
integer(kind=C_INT), intent(in) :: keysize

Return Value type(C_PTR)

public pure function libxsmm_timer_ncycles(tick0, tick1)

Returns the difference between two timer ticks (cycles). Implicit FORTRAN 77 interface: subroutine available.

Arguments

Type IntentOptional Attributes Name
integer(kind=LIBXSMM_TICKINT_KIND), intent(in) :: tick0
integer(kind=LIBXSMM_TICKINT_KIND), intent(in) :: tick1

Return Value integer(kind=LIBXSMM_TICKINT_KIND)

public elemental function libxsmm_coprime2(n)

Calculate co-prime number <= n/2 (except: libxsmm_coprime2(0|1) == 0). Implicit FORTRAN 77 interface: INTEGER(8) :: coprime (OUT), n (IN)

Arguments

Type IntentOptional Attributes Name
integer(kind=C_LONG_LONG), intent(in) :: n

Return Value integer(kind=C_LONG_LONG)

public function libxsmm_hash_char(key, seed)

Calculates a hash value for the given array and seed. FORTRAN 77: see libxsmm_xhash

Arguments

Type IntentOptional Attributes Name
character, INTENT(IN)$CONTIGUOUS :: key(:)
integer(kind=C_INT), intent(in) :: seed

Return Value integer(kind=C_INT)

public function libxsmm_hash_i8(key, seed)

Calculates a hash value for the given array and seed. FORTRAN 77: see libxsmm_xhash

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT8_T), INTENT(IN)$CONTIGUOUS :: key(:)
integer(kind=C_INT), intent(in) :: seed

Return Value integer(kind=C_INT)

public function libxsmm_hash_i32(key, seed)

Calculates a hash value for the given array and seed. FORTRAN 77: see libxsmm_xhash

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT), INTENT(IN)$CONTIGUOUS :: key(:)
integer(kind=C_INT), intent(in) :: seed

Return Value integer(kind=C_INT)

public function libxsmm_hash_i64(key, seed)

Calculates a hash value for the given array and seed. FORTRAN 77: see libxsmm_xhash

Arguments

Type IntentOptional Attributes Name
integer(kind=C_LONG_LONG), INTENT(IN)$CONTIGUOUS :: key(:)
integer(kind=C_INT), intent(in) :: seed

Return Value integer(kind=C_INT)

public function libxsmm_diff_char(a, b)

Calculates if there is a difference between two arrays. FORTRAN 77: see libxsmm_xdiff

Arguments

Type IntentOptional Attributes Name
character, INTENT(IN)$CONTIGUOUS :: a(:)
character, INTENT(IN)$CONTIGUOUS :: b(:)

Return Value logical(kind=C_BOOL)

public function libxsmm_diff_i8(a, b)

Calculates if there is a difference between two arrays. FORTRAN 77: see libxsmm_xdiff

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT8_T), INTENT(IN)$CONTIGUOUS :: a(:)
integer(kind=C_INT8_T), INTENT(IN)$CONTIGUOUS :: b(:)

Return Value logical(kind=C_BOOL)

public function libxsmm_diff_i32(a, b)

Calculates if there is a difference between two arrays. FORTRAN 77: see libxsmm_xdiff

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT), INTENT(IN)$CONTIGUOUS :: a(:)
integer(kind=C_INT), INTENT(IN)$CONTIGUOUS :: b(:)

Return Value logical(kind=C_BOOL)

public function libxsmm_diff_i64(a, b)

Calculates if there is a difference between two arrays. FORTRAN 77: see libxsmm_xdiff

Arguments

Type IntentOptional Attributes Name
integer(kind=C_LONG_LONG), INTENT(IN)$CONTIGUOUS :: a(:)
integer(kind=C_LONG_LONG), INTENT(IN)$CONTIGUOUS :: b(:)

Return Value logical(kind=C_BOOL)

public function libxsmm_aligned(location, increment, alignment)

Check if location is SIMD-aligned and optionally consider the next access as if reached by incrementing the location (in Bytes). Optionally calculates the alignment of the given location in Bytes.

Arguments

Type IntentOptional Attributes Name
type(C_PTR), intent(in), VALUE :: location
integer(kind=C_INT), intent(in), optional :: increment
integer(kind=C_INT), intent(out), optional :: alignment

Return Value logical


Subroutines

public subroutine libxsmm_release_dmmkernel(kernel)

Deallocate JIT'ted code created by libxsmm_create routines. To unregister code generated with libxsmm_dispatch is unnecessary.

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_DMMFUNCTION), intent(in) :: kernel

public subroutine libxsmm_release_smmkernel(kernel)

Deallocate JIT'ted code created by libxsmm_create routines. To unregister code generated with libxsmm_dispatch is unnecessary.

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_SMMFUNCTION), intent(in) :: kernel

public subroutine libxsmm_dmmdispatch(kernel, m, n, k, lda, ldb, ldc, alpha, beta, flags, prefetch)

Query or JIT-generate an SMM-kernel (double-precision).

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_DMMFUNCTION), intent(out) :: kernel
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: lda
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: ldb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: ldc
real(kind=C_DOUBLE), intent(in), optional, TARGET :: alpha
real(kind=C_DOUBLE), intent(in), optional, TARGET :: beta
integer(kind=C_INT), intent(in), optional, TARGET :: flags
integer(kind=C_INT), intent(in), optional, TARGET :: prefetch

public subroutine libxsmm_smmdispatch(kernel, m, n, k, lda, ldb, ldc, alpha, beta, flags, prefetch)

Query or JIT-generate an SMM-kernel (single-precision).

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_SMMFUNCTION), intent(out) :: kernel
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: lda
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: ldb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional, TARGET :: ldc
real(kind=C_FLOAT), intent(in), optional, TARGET :: alpha
real(kind=C_FLOAT), intent(in), optional, TARGET :: beta
integer(kind=C_INT), intent(in), optional, TARGET :: flags
integer(kind=C_INT), intent(in), optional, TARGET :: prefetch

public subroutine libxsmm_dmmcall_abc(kernel, a, b, c)

Calls the kernel with the given arguments. Alternatively, PROCPOINTER can be used as shown by the inner comments of this routine (LIBXSMM_FUNCTION3). The libxsmm_xmmcall routines can be used in FORTRAN77.

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_DMMFUNCTION), intent(in) :: kernel
real(kind=C_DOUBLE), intent(in), TARGET :: a(*)
real(kind=C_DOUBLE), intent(in), TARGET :: b(*)
real(kind=C_DOUBLE), intent(inout), TARGET :: c(*)

public subroutine libxsmm_dmmcall_prf(kernel, a, b, c, pa, pb, pc)

Calls the kernel with the given arguments. Alternatively, PROCPOINTER can be used as shown by the inner comments of this routine (LIBXSMM_FUNCTION6). The libxsmm_xmmcall routines can be used in FORTRAN77.

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_DMMFUNCTION), intent(in) :: kernel
real(kind=C_DOUBLE), intent(in), TARGET :: a(*)
real(kind=C_DOUBLE), intent(in), TARGET :: b(*)
real(kind=C_DOUBLE), intent(inout), TARGET :: c(*)
real(kind=C_DOUBLE), intent(in), TARGET :: pa(*)
real(kind=C_DOUBLE), intent(in), TARGET :: pb(*)
real(kind=C_DOUBLE), intent(in), TARGET :: pc(*)

public subroutine libxsmm_dmmcall(kernel, a, b, c, pa, pb, pc)

See also libxsmm_dmmcall_abc and libxsmm_dmmcall_prf.

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_DMMFUNCTION), intent(in) :: kernel
real(kind=C_DOUBLE), intent(in), TARGET :: a(*)
real(kind=C_DOUBLE), intent(in), TARGET :: b(*)
real(kind=C_DOUBLE), intent(inout), TARGET :: c(*)
real(kind=C_DOUBLE), intent(in), optional, TARGET :: pa(*)
real(kind=C_DOUBLE), intent(in), optional, TARGET :: pb(*)
real(kind=C_DOUBLE), intent(in), optional, TARGET :: pc(*)

public subroutine libxsmm_smmcall_abc(kernel, a, b, c)

Calls the kernel with the given arguments. Alternatively, PROCPOINTER can be used as shown by the inner comments of this routine (LIBXSMM_FUNCTION3). The libxsmm_xmmcall routines can be used in FORTRAN77.

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_SMMFUNCTION), intent(in) :: kernel
real(kind=C_FLOAT), intent(in), TARGET :: a(*)
real(kind=C_FLOAT), intent(in), TARGET :: b(*)
real(kind=C_FLOAT), intent(inout), TARGET :: c(*)

public subroutine libxsmm_smmcall_prf(kernel, a, b, c, pa, pb, pc)

Calls the kernel with the given arguments. Alternatively, PROCPOINTER can be used as shown by the inner comments of this routine (LIBXSMM_FUNCTION6). The libxsmm_xmmcall routines can be used in FORTRAN77.

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_SMMFUNCTION), intent(in) :: kernel
real(kind=C_FLOAT), intent(in), TARGET :: a(*)
real(kind=C_FLOAT), intent(in), TARGET :: b(*)
real(kind=C_FLOAT), intent(inout), TARGET :: c(*)
real(kind=C_FLOAT), intent(in), TARGET :: pa(*)
real(kind=C_FLOAT), intent(in), TARGET :: pb(*)
real(kind=C_FLOAT), intent(in), TARGET :: pc(*)

public subroutine libxsmm_smmcall(kernel, a, b, c, pa, pb, pc)

See also libxsmm_smmcall_abc and libxsmm_smmcall_prf.

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_SMMFUNCTION), intent(in) :: kernel
real(kind=C_FLOAT), intent(in), TARGET :: a(*)
real(kind=C_FLOAT), intent(in), TARGET :: b(*)
real(kind=C_FLOAT), intent(inout), TARGET :: c(*)
real(kind=C_FLOAT), intent(in), optional, TARGET :: pa(*)
real(kind=C_FLOAT), intent(in), optional, TARGET :: pb(*)
real(kind=C_FLOAT), intent(in), optional, TARGET :: pc(*)

public pure subroutine libxsmm_dgemm0(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

Auto-dispatched general dense MM (double-precision). This overload belongs to libxsmm_(d)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_DOUBLE), intent(in), optional :: alpha
real(kind=C_DOUBLE), intent(in) :: a
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
real(kind=C_DOUBLE), intent(in) :: b
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
real(kind=C_DOUBLE), intent(in), optional :: beta
real(kind=C_DOUBLE), intent(inout) :: c
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc

public pure subroutine libxsmm_dgemm1(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

Auto-dispatched general dense MM (double-precision). This overload belongs to libxsmm_(d)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_DOUBLE), intent(in), optional :: alpha
real(kind=C_DOUBLE), intent(in) :: a(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
real(kind=C_DOUBLE), intent(in) :: b(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
real(kind=C_DOUBLE), intent(in), optional :: beta
real(kind=C_DOUBLE), intent(inout) :: c(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc

public pure subroutine libxsmm_dgemm2(transa, transb, m, n, k, a, b, c, alpha, beta)

Auto-dispatched general dense MM (double-precision). This overload belongs to libxsmm_(d)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_DOUBLE), intent(in) :: a(m,*)
real(kind=C_DOUBLE), intent(in) :: b(k,*)
real(kind=C_DOUBLE), intent(inout) :: c(m,*)
real(kind=C_DOUBLE), intent(in), optional :: alpha
real(kind=C_DOUBLE), intent(in), optional :: beta

public pure subroutine libxsmm_dgemm3(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

Auto-dispatched general dense MM (double-precision). This overload belongs to libxsmm_(d)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_DOUBLE), intent(in), optional :: alpha
real(kind=C_DOUBLE), intent(in) :: a(lda,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
real(kind=C_DOUBLE), intent(in) :: b(ldb,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
real(kind=C_DOUBLE), intent(in), optional :: beta
real(kind=C_DOUBLE), intent(inout) :: c(ldc,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc

public pure subroutine libxsmm_sgemm0(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

Auto-dispatched general dense MM (single-precision). This overload belongs to libxsmm_(s)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_FLOAT), intent(in), optional :: alpha
real(kind=C_FLOAT), intent(in) :: a
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
real(kind=C_FLOAT), intent(in) :: b
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
real(kind=C_FLOAT), intent(in), optional :: beta
real(kind=C_FLOAT), intent(inout) :: c
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc

public pure subroutine libxsmm_sgemm1(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

Auto-dispatched general dense MM (single-precision). This overload belongs to libxsmm_(s)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_FLOAT), intent(in), optional :: alpha
real(kind=C_FLOAT), intent(in) :: a(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
real(kind=C_FLOAT), intent(in) :: b(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
real(kind=C_FLOAT), intent(in), optional :: beta
real(kind=C_FLOAT), intent(inout) :: c(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc

public pure subroutine libxsmm_sgemm2(transa, transb, m, n, k, a, b, c, alpha, beta)

Auto-dispatched general dense MM (single-precision). This overload belongs to libxsmm_(s)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_FLOAT), intent(in) :: a(m,*)
real(kind=C_FLOAT), intent(in) :: b(k,*)
real(kind=C_FLOAT), intent(inout) :: c(m,*)
real(kind=C_FLOAT), intent(in), optional :: alpha
real(kind=C_FLOAT), intent(in), optional :: beta

public pure subroutine libxsmm_sgemm3(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

Auto-dispatched general dense MM (single-precision). This overload belongs to libxsmm_(s)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_FLOAT), intent(in), optional :: alpha
real(kind=C_FLOAT), intent(in) :: a(lda,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
real(kind=C_FLOAT), intent(in) :: b(ldb,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
real(kind=C_FLOAT), intent(in), optional :: beta
real(kind=C_FLOAT), intent(inout) :: c(ldc,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc

public pure subroutine libxsmm_blas_dgemm0(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(d)gemm. This overload belongs to libxsmm_blas_(d)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_DOUBLE), intent(in), optional :: alpha
real(kind=C_DOUBLE), intent(in) :: a
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
real(kind=C_DOUBLE), intent(in) :: b
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
real(kind=C_DOUBLE), intent(in), optional :: beta
real(kind=C_DOUBLE), intent(inout) :: c
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc

public pure subroutine libxsmm_blas_dgemm1(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(d)gemm. This overload belongs to libxsmm_blas_(d)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_DOUBLE), intent(in), optional :: alpha
real(kind=C_DOUBLE), intent(in) :: a(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
real(kind=C_DOUBLE), intent(in) :: b(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
real(kind=C_DOUBLE), intent(in), optional :: beta
real(kind=C_DOUBLE), intent(inout) :: c(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc

public pure subroutine libxsmm_blas_dgemm2(transa, transb, m, n, k, a, b, c, alpha, beta)

Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(d)gemm. This overload belongs to libxsmm_blas_(d)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_DOUBLE), intent(in) :: a(m,*)
real(kind=C_DOUBLE), intent(in) :: b(k,*)
real(kind=C_DOUBLE), intent(inout) :: c(m,*)
real(kind=C_DOUBLE), intent(in), optional :: alpha
real(kind=C_DOUBLE), intent(in), optional :: beta

public pure subroutine libxsmm_blas_dgemm3(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(d)gemm. This overload belongs to libxsmm_blas_(d)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_DOUBLE), intent(in), optional :: alpha
real(kind=C_DOUBLE), intent(in) :: a(lda,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
real(kind=C_DOUBLE), intent(in) :: b(ldb,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
real(kind=C_DOUBLE), intent(in), optional :: beta
real(kind=C_DOUBLE), intent(inout) :: c(ldc,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc

public pure subroutine libxsmm_blas_sgemm0(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(s)gemm. This overload belongs to libxsmm_blas_(s)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_FLOAT), intent(in), optional :: alpha
real(kind=C_FLOAT), intent(in) :: a
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
real(kind=C_FLOAT), intent(in) :: b
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
real(kind=C_FLOAT), intent(in), optional :: beta
real(kind=C_FLOAT), intent(inout) :: c
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc

public pure subroutine libxsmm_blas_sgemm1(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(s)gemm. This overload belongs to libxsmm_blas_(s)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_FLOAT), intent(in), optional :: alpha
real(kind=C_FLOAT), intent(in) :: a(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
real(kind=C_FLOAT), intent(in) :: b(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
real(kind=C_FLOAT), intent(in), optional :: beta
real(kind=C_FLOAT), intent(inout) :: c(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc

public pure subroutine libxsmm_blas_sgemm2(transa, transb, m, n, k, a, b, c, alpha, beta)

Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(s)gemm. This overload belongs to libxsmm_blas_(s)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_FLOAT), intent(in) :: a(m,*)
real(kind=C_FLOAT), intent(in) :: b(k,*)
real(kind=C_FLOAT), intent(inout) :: c(m,*)
real(kind=C_FLOAT), intent(in), optional :: alpha
real(kind=C_FLOAT), intent(in), optional :: beta

public pure subroutine libxsmm_blas_sgemm3(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

Re-exposes BLAS based GEMM routine with an interfaces similar to libxsmm_(s)gemm. This overload belongs to libxsmm_blas_(s)gemm.

Arguments

Type IntentOptional Attributes Name
character, intent(in), optional :: transa
character, intent(in), optional :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
real(kind=C_FLOAT), intent(in), optional :: alpha
real(kind=C_FLOAT), intent(in) :: a(lda,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: lda
real(kind=C_FLOAT), intent(in) :: b(ldb,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldb
real(kind=C_FLOAT), intent(in), optional :: beta
real(kind=C_FLOAT), intent(inout) :: c(ldc,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldc

public pure subroutine libxsmm_matcopy_p0(output, input, typesize, m, n, ldi, ldo)

Matrix-copy (2-dimensional copy) routine. If the input (optional) is not present, the routine is used to zero-fill the out-matrix.

Arguments

Type IntentOptional Attributes Name
type(C_PTR), intent(in) :: output
type(C_PTR), intent(in), optional :: input
integer(kind=C_INT), intent(in) :: typesize
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo

public subroutine libxsmm_matcopy_d1(output, input, m, n, ldi, ldo)

Matrix-copy (2-dimensional copy) routine (DP/rank-1).

Arguments

Type IntentOptional Attributes Name
real(kind=C_DOUBLE), intent(out), TARGET :: output(*)
real(kind=C_DOUBLE), intent(in), optional, TARGET :: input(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo

public subroutine libxsmm_matcopy_d2(output, input, m, n, ldi, ldo)

Matrix-copy (2-dimensional copy) routine (DP/rank-2).

Arguments

Type IntentOptional Attributes Name
real(kind=C_DOUBLE), intent(out), TARGET :: output(ldo,*)
real(kind=C_DOUBLE), intent(in), optional, TARGET :: input(ldi,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo

public subroutine libxsmm_matcopy_s1(output, input, m, n, ldi, ldo)

Matrix-copy (2-dimensional copy) routine (SP/rank-1).

Arguments

Type IntentOptional Attributes Name
real(kind=C_FLOAT), intent(out), TARGET :: output(*)
real(kind=C_FLOAT), intent(in), optional, TARGET :: input(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo

public subroutine libxsmm_matcopy_s2(output, input, m, n, ldi, ldo)

Matrix-copy (2-dimensional copy) routine (SP/rank-2).

Arguments

Type IntentOptional Attributes Name
real(kind=C_FLOAT), intent(out), TARGET :: output(ldo,*)
real(kind=C_FLOAT), intent(in), optional, TARGET :: input(ldi,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo

public pure subroutine libxsmm_itrans_p0(matrix, typesize, m, n, ldi, ldo)

Transpose a matrix (in-place form).

Arguments

Type IntentOptional Attributes Name
type(C_PTR), intent(in) :: matrix
integer(kind=C_INT), intent(in) :: typesize
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo

public subroutine libxsmm_itrans_d1(matrix, m, n, ldi, ldo)

Transpose a matrix (in-place form, DP/rank-1).

Arguments

Type IntentOptional Attributes Name
real(kind=C_DOUBLE), intent(inout), TARGET :: matrix(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo

public subroutine libxsmm_itrans_d2(matrix, m, n, ld)

Transpose a matrix (in-place form, DP/rank-2).

Arguments

Type IntentOptional Attributes Name
real(kind=C_DOUBLE), intent(inout), TARGET :: matrix(ld,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ld

public subroutine libxsmm_itrans_s1(matrix, m, n, ldi, ldo)

Transpose a matrix (in-place form, SP/rank-1).

Arguments

Type IntentOptional Attributes Name
real(kind=C_FLOAT), intent(inout), TARGET :: matrix(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo

public subroutine libxsmm_itrans_s2(matrix, m, n, ld)

Transpose a matrix (in-place form, SP/rank-2).

Arguments

Type IntentOptional Attributes Name
real(kind=C_FLOAT), intent(inout), TARGET :: matrix(ld,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ld

public pure subroutine libxsmm_otrans_p0(output, input, typesize, m, n, ldi, ldo)

Transpose a matrix (out-of-place form).

Arguments

Type IntentOptional Attributes Name
type(C_PTR), intent(in) :: output
type(C_PTR), intent(in) :: input
integer(kind=C_INT), intent(in) :: typesize
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo

public subroutine libxsmm_otrans_d1(output, input, m, n, ldi, ldo)

Transpose a matrix (out-of-place form, DP/rank-1).

Arguments

Type IntentOptional Attributes Name
real(kind=C_DOUBLE), intent(out), TARGET :: output(*)
real(kind=C_DOUBLE), intent(in), TARGET :: input(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo

public subroutine libxsmm_otrans_d2(output, input, m, n, ldi, ldo)

Transpose a matrix (out-of-place form, DP/rank-2).

Arguments

Type IntentOptional Attributes Name
real(kind=C_DOUBLE), intent(out), TARGET :: output(ldo,*)
real(kind=C_DOUBLE), intent(in), TARGET :: input(ldi,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo

public subroutine libxsmm_otrans_s1(output, input, m, n, ldi, ldo)

Transpose a matrix (out-of-place form, SP/rank-1).

Arguments

Type IntentOptional Attributes Name
real(kind=C_FLOAT), intent(out), TARGET :: output(*)
real(kind=C_FLOAT), intent(in), TARGET :: input(*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldo

public subroutine libxsmm_otrans_s2(output, input, m, n, ldi, ldo)

Transpose a matrix (out-of-place form, SP/rank-2).

Arguments

Type IntentOptional Attributes Name
real(kind=C_FLOAT), intent(out), TARGET :: output(ldo,*)
real(kind=C_FLOAT), intent(in), TARGET :: input(ldi,*)
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldi
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: ldo

public pure subroutine libxsmm_gemm_batch(iprec, oprec, transa, transb, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b, beta, c, ldc, stride_c, index_stride, index_base, batchsize, batchcheck)

Process a series of SMMs (batch). See also libxsmm_xgemm_batch_task. Implicit FORTRAN 77 interface: INTEGER(4) :: iprec, oprec, batchcheck CHAR :: transa, transb INTEGER(4|8) :: m, n, k, lda, ldb, ldc REAL(4|8) :: alpha, beta ARRAY :: a, b, c ARRAY/VALUE :: stride_a, stride_b, stride_c INTEGER(4|8) :: index_stride, index_base, batchsize

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT), intent(in) :: iprec
integer(kind=C_INT), intent(in) :: oprec
character, intent(in) :: transa
character, intent(in) :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
type(C_PTR), intent(in), VALUE :: alpha
type(C_PTR), intent(in), VALUE :: a
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
type(C_PTR), intent(in), VALUE :: stride_a
type(C_PTR), intent(in), VALUE :: b
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
type(C_PTR), intent(in), VALUE :: stride_b
type(C_PTR), intent(in), VALUE :: beta
type(C_PTR), intent(in), VALUE :: c
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
type(C_PTR), intent(in), VALUE :: stride_c
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: index_stride
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: index_base
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: batchsize
integer(kind=C_INT), intent(in), optional :: batchcheck

public pure subroutine libxsmm_gemm_batch_omp(iprec, oprec, transa, transb, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b, beta, c, ldc, stride_c, index_stride, index_base, batchsize, batchcheck)

Process a series of SMMs (batch) with OpenMP (libxsmmext). Implicit FORTRAN 77 interface: INTEGER(4) :: iprec, oprec, batchcheck CHAR :: transa, transb INTEGER(4|8) :: m, n, k, lda, ldb, ldc REAL(4|8) :: alpha, beta ARRAY :: a, b, c ARRAY/VALUE :: stride_a, stride_b, stride_c INTEGER(4|8) :: index_stride, index_base, batchsize

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT), intent(in) :: iprec
integer(kind=C_INT), intent(in) :: oprec
character, intent(in) :: transa
character, intent(in) :: transb
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: n
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: k
type(C_PTR), intent(in), VALUE :: alpha
type(C_PTR), intent(in), VALUE :: a
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: lda
type(C_PTR), intent(in), VALUE :: stride_a
type(C_PTR), intent(in), VALUE :: b
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldb
type(C_PTR), intent(in), VALUE :: stride_b
type(C_PTR), intent(in), VALUE :: beta
type(C_PTR), intent(in), VALUE :: c
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldc
type(C_PTR), intent(in), VALUE :: stride_c
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: index_stride
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: index_base
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: batchsize
integer(kind=C_INT), intent(in), optional :: batchcheck

public pure subroutine libxsmm_matdiff(info, datatype, m, n, ref, tst, ldref, ldtst)

Utility function to calculate a collection of scalar differences between two matrices (libxsmm_matdiff_info). The location (m, n) of the largest difference (linf_abs) is recorded (also if NaN). In case of NaN, differences are set to infinity. If no difference is discovered, the location (m, n) is negative (OOB). Implicit FORTRAN 77 interface: TYPE :: info INTEGER(4) :: datatype INTEGER(4|8) :: m, n, ldref, ldtst ARRAY :: ref, tst

Arguments

Type IntentOptional Attributes Name
type(LIBXSMM_MATDIFF_INFO), intent(out) :: info
integer(kind=C_INT), intent(in) :: datatype
integer(kind=LIBXSMM_BLASINT_KIND), intent(in) :: m
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: n
type(C_PTR), intent(in), optional :: ref
type(C_PTR), intent(in), optional :: tst
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldref
integer(kind=LIBXSMM_BLASINT_KIND), intent(in), optional :: ldtst