oneapi::mkl::sparse::gemm

Computes a sparse matrix-dense matrix product. Currently, only row-major layout for dense matrix storage in Data Parallel C++ oneapi::mkl::sparse::gemm functionality is supported.

Description

Note

Refer to Supported Types for a list of supported <fp> and <intType> and refer to Exceptions for a detailed description of the exceptions thrown.

The oneapi::mkl::sparse::gemm routine computes a sparse matrix-dense matrix product defined as

C \leftarrow \alpha\cdot\text{op}(A)\cdot B + \beta\cdot C

where: \alpha and \beta are scalars, A is a sparse matrix of size num_rows rows by num_cols columns, \text{op()} is a matrix modifier:

\text{op}(A) = \begin{cases} A,& \text{ oneapi::mkl::transpose::nontrans}\\ A^{T},& \text{ oneapi::mkl::transpose::trans}\\A^{H},& \text{ oneapi::mkl::transpose::conjtrans.} \end{cases}

The dense matrix objects B and C are stored with row-major layout and have have appropriately sized number of rows for the matrix product and columns number of columns.

API

Syntax

Note

Currently, complex types are not supported.

Using SYCL buffers:

namespace oneapi::mkl::sparse {
    void gemm (
        cl::sycl::queue &queue,
        oneapi::mkl::transpose transpose_flag,
        const fp alpha,
        oneapi::mkl::sparse::matrix_handle_t handle,
        cl::sycl::buffer<fp, 1> &b,
        const std::int64_t columns,
        const std::int64_t ldb,
        const fp beta,
        cl::sycl::buffer<fp, 1> &c,
        const std::int64_t ldc)
}

Using USM pointers:

namespace oneapi::mkl::sparse {
    cl::sycl::event gemm (
        cl::sycl::queue &queue,
        oneapi::mkl::transpose transpose_flag,
        const fp alpha,
        oneapi::mkl::sparse::matrix_handle_t handle,
        const fp *b,
        const std::int64_t columns,
        const std::int64_t ldb,
        const fp beta,
        fp *c,
        const std::int64_t ldc,
        const cl::sycl::vector_class<cl::sycl::event> &dependencies = {})
}

Include Files

  • oneapi/mkl/spblas.hpp

Input Parameters

queue

Specifies the SYCL command queue which will be used for SYCL kernels execution.

transpose_flag

Specifies operation op() on input matrix.

oneapi::mkl::transpose::nontrans

Non-transpose, \text{op}(A) = A.

oneapi::mkl::transpose::trans

Transpose, \text{op}(A) = A^{T}.

oneapi::mkl::transpose::conjtrans

Conjugate transpose, \text{op}(A) = A^{H}.

Note

Currently, the only supported case for operation is oneapi::mkl::transpose::nontrans.

alpha

Specifies the scalar, \alpha.

handle

Handle to object containing sparse matrix and other internal data. Created using one of the oneapi::mkl::sparse::set_<sparse_matrix_type>_structure routines.

Note

Currently, the only supported case for <sparse_matrix_type> is csr.

b

SYCL buffer or device-accessible USM pointer of size at least rows*ldb, where rows = the number of columns of matrix A if op = oneapi::mkl::transpose::nontrans, or rows = the number of rows of matrix A otherwise.

columns

Number of columns of matrix C.

ldb

Specifies the leading dimension of matrix B. Must be at least columns, and it must be positive.

beta

Specifies the scalar, \beta.

c

SYCL buffer or device-accessible USM pointer of size at least rows*ldc, where rows = the number of columns of matrix A if op = oneapi::mkl::transpose::nontrans, or rows = the number of columns of matrix A otherwise.

ldc

Specifies the leading dimension of matrix C. Must be at least columns, and it must be positive.

dependencies

A vector of type cl::sycl::vector_class<cl::sycl::event> containing the list of events that the oneapi::mkl::sparse::gemm routine depends on.

Output Parameters

c

Overwritten by the updated matrix C.

Return Values (USM Only)

cl::sycl::event

SYCL event which can be waited upon or added as a dependency for the completion of the gemm routine.

Examples

An example of how to use oneapi::mkl::sparse::gemm with SYCL buffers or USM can be found in the oneMKL installation directory, under:

examples/dpcpp/sparse_blas/source/sparse_gemm.cpp
examples/dpcpp/sparse_blas/source/sparse_gemm_usm.cpp