Developer Reference for Intel® oneAPI Math Kernel Library for C

ID 766684
Date 11/07/2023
Public

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

Document Table of Contents

cblas_?dgmm_batch_strided

Computes groups of matrix-vector product using general matrices.

Syntax

void cblas_sdgmm_batch_strided (const CBLAS_LAYOUT layout, const CBLAS_SIDE left_right, const MKL_INT m, const MKL_INT n, const float *a, const MKL_INT lda, const MKL_INT stridea, const float *x, const MKL_INT incx, const MKL_INT stridex, const float *c, const MKL_INT ldc, const MKL_INT stridec, const MKL_INT batch_size);

void cblas_ddgmm_batch_strided (const CBLAS_LAYOUT layout, const CBLAS_SIDE left_right, const MKL_INT m, const MKL_INT n, const double *a, const MKL_INT lda, const MKL_INT stridea, const double *x, const MKL_INT incx, const MKL_INT stridex, const double *c, const MKL_INT ldc, const MKL_INT stridec, const MKL_INT batch_size);

void cblas_cdgmm_batch_strided (const CBLAS_LAYOUT layout, const CBLAS_SIDE left_right, const MKL_INT m, const MKL_INT n, const void *a, const MKL_INT lda, const MKL_INT stridea, const void *x, const MKL_INT incx, const MKL_INT stridex, const void *c, const MKL_INT ldc, const MKL_INT stridec, const MKL_INT batch_size);

void cblas_zdgmm_batch_strided (const CBLAS_LAYOUT layout, const CBLAS_SIDE left_right, const MKL_INT m, const MKL_INT n, const void *a, const MKL_INT lda, const MKL_INT stridea, const void *x, const MKL_INT incx, const MKL_INT stridex, const void *c, const MKL_INT ldc, const MKL_INT stridec, const MKL_INT batch_size);

Include Files

  • mkl.h

Description

The cblas_?dgmm_batch_strided routines perform a series of diagonal matrix-matrix product. The diagonal matrices are stored as dense vectors and the operations are performed with group of matrices and vectors.

All matrices a and c and vector x have the same parameters (size, increments) and are stored at constant stride, respectively, given by stridea, stridec, and stridex from each other. The operation is defined as

for i = 0 … batch_size – 1
    A and C are matrices at offset i * stridea in a and i * stridec in c
    X is a vector at offset i * stridex in x
    C = diag(X) * A or C = A * diag(X)
end for

Input Parameters

layout

Specifies whether two-dimensional array storage is row-major (CblasRowMajor) or column-major (CblasColMajor).

left_right

Specifies the position of the diagonal matrix in the matrix product

if left_right = CblasLeft, then C = diag(X) * A;

if left_right = CblasRight, then C = A * diag(X).

m

Number of rows of the matrices A and C. The value of m must be at least 0.

n

Number of columns of the matrices A and C. The value of n must be at least 0.

a

Array holding all the input matrix A. Must be of size at least lda*k + stridea * (batch_size -1) where k is n if column major layout is used or m if row major layout is used.

lda

Specifies the leading dimension of the matrixA. It must be positive and at least mif column major layout is used or at least n if row major layout is used.

stridea

Stride between two consecutive A matrices, must be at least 0.

x

Array holding all the input vector x. Must be of size at least (1 + (len -1)*abs(incx)) + stridex * (batch_size - 1) where len is n if the diagonal matrix is on the right of the product or m otherwise.

incx

Stride between two consecutive elements of the x vectors.

stridex

Stride between two consecutive x vectors, must be at least 0.

c

Array holding all the input matrix C. Must be of size at least batch_size * stridec.

ldc

Specifies the leading dimension of the matrix C. It must be positive and at least mif column major layout is used or at least n if row major layout is used.

stridec

Stride between two consecutive A matrices, must be at least ldc * nif column major layout is used or ldc * m if row major layout is used.

batch_size

Number of dgmm computations to perform and a c matrices and x vectors. Must be at least 0.

Output Parameters

c

Array holding the batch_size updated matrices c.