oneapi::mkl::sparse::gemm

Computes a sparse matrix-dense matrix product.

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\text{op}(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 for A and B using the following description:

\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 or column-major layout and 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::layout dense_matrix_layout,
      oneapi::mkl::transpose transpose_A,
      oneapi::mkl::transpose transpose_B,
      const fp alpha,
      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);
}
namespace oneapi::mkl::sparse {
   [[deprecated("Use oneapi::mkl::sparse::gemm(queue, oneapi::mkl::layout::row_major, transpose_A, oneapi::mkl::transpose:nontrans, alpha, ... ) instead.")]]
    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::layout dense_matrix_layout,
        oneapi::mkl::transpose transpose_A,
        oneapi::mkl::transpose transpose_B,
        const fp alpha,
        matrix_handle_t handle,
        fp *b,
        const std::int64_t columns,
        const std::int64_t ldb,
        const fp beta,
        fp *c,
        const std::int64_t ldc,
        const std::vector<cl::sycl::event> &dependencies = {});
}
namespace oneapi::mkl::sparse {
   [[deprecated("Use oneapi::mkl::sparse::gemm(queue, oneapi::mkl::layout::row_major, transpose_A, oneapi::mkl::transpose:nontrans,     alpha, ... ) instead.")]]
     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 std::vector<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.

dense_matrix_layout

Specifies the storage scheme in memory for the dense matrices. Note that this layout applies to both B and C dense matrices.

transpose_A (in old API, transpose_flag)

Specifies operation op() on input matrix A.

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.

transpose_B

Specifies operation op() on input matrix B.

oneapi::mkl::transpose::nontrans

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

oneapi::mkl::transpose::trans

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

oneapi::mkl::transpose::conjtrans

Conjugate transpose, \text{op}(B) = B^{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>_data 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*cols, where (with the assumption of transpose_B == oneapi::mkl::transpose::nontrans).

layout=oneapi::mkl::layout::col-major

layout=oneapi::mkl::layout::row-major

rows (number of rows in B)

ldb

if \text{op}(A) = A, number of columns in A

if \text{op}(A) = A^{T}, number of rows in A

cols (number of columns in B)

columns

ldb

columns

Number of columns of matrix C.

ldb

Specifies the leading dimension of matrix B. Must be positive, and at least columns if dense_matrix_layout=oneapi::mkl::layout::row-major or at least number of columns in A if dense_matrix_layout=oneapi::mkl::layout::col-major.

beta

Specifies the scalar, \beta.

c

SYCL buffer or device-accessible USM pointer of size at least rows*cols, where:

layout=oneapi::mkl::layout::col-major

layout=oneapi::mkl::layout::row-major

rows (number of rows in C)

ldc

if \text{op}(A) = A, number of rows in A

if \text{op}(A) = A^{T}, number of columns in A

cols (number of columns in C)

columns

ldc

ldc

Specifies the leading dimension of matrix C. Must be positive, and at least columns if dense_matrix_layout=oneapi::mkl::layout::row-major or at least number of rows in A if dense_matrix_layout=oneapi::mkl::layout::col-major.

dependencies

A vector of type std::vector<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_row_major.cpp
examples/dpcpp/sparse_blas/source/sparse_gemm_row_major_usm.cpp
examples/dpcpp/sparse_blas/source/sparse_gemm_col_major.cpp
examples/dpcpp/sparse_blas/source/sparse_gemm_col_major_usm.cpp