Intel® oneAPI Math Kernel Library Developer Reference - C

mkl_sparse_?_sp2md

Computes the product of two sparse matrices (support operations on both matrices) and stores the result as a dense matrix.

Syntax

sparse_status_t mkl_sparse_s_sp2md ( const sparse_operation_t transA, const struct matrix_descr descrA, const sparse_matrix_t A, const sparse_operation_t transB, const struct matrix_descr descrB, const sparse_matrix_t B, const float alpha, const float beta, float *C, const sparse_layout_t layout, const MKL_INT ldc );

sparse_status_t mkl_sparse_d_sp2md ( const sparse_operation_t transA, const struct matrix_descr descrA, const sparse_matrix_t A, const sparse_operation_t transB, const struct matrix_descr descrB, const sparse_matrix_t B, const double alpha, const double beta, double *C, const sparse_layout_t layout, const MKL_INT ldc );

sparse_status_t mkl_sparse_c_sp2md ( const sparse_operation_t transA, const struct matrix_descr descrA, const sparse_matrix_t A, const sparse_operation_t transB, const struct matrix_descr descrB, const sparse_matrix_t B, const MKL_Complex8 alpha, const MKL_Complex8 beta, MKL_Complex8 *C, const sparse_layout_t layout, const MKL_INT ldc );

sparse_status_t mkl_sparse_z_sp2md ( const sparse_operation_t transA, const struct matrix_descr descrA, const sparse_matrix_t A, const sparse_operation_t transB, const struct matrix_descr descrB, const sparse_matrix_t B, const MKL_Complex16 alpha, const MKL_Complex16 beta, MKL_Complex16 *C, const sparse_layout_t layout, const MKL_INT ldc );

Include Files

Description

The mkl_sparse_?_sp2md routine performs a matrix-matrix operation:

C = alpha * opA(A) *opB(B) + beta*C

where A and B are sparse matrices, opA is a matrix modifier for matrix A, opB is a matrix modifier for matrix B, and C is a dense matrix, alpha and beta are scalars.

Note

This routine is not supported for sparse matrices in the COO format. For sparse matrices in BSR format, these combinations of (indexing, block_layout) are supported:

  • (SPARSE_INDEX_BASE_ZERO, SPARSE_LAYOUT_ROW_MAJOR)

  • (SPARSE_INDEX_BASE_ONE, SPARSE_LAYOUT_COLUMN_MAJOR)

Input Parameters

transA

Specifies operation op() on the input matrix.

SPARSE_OPERATION_NON_TRANSPOSE

Non-transpose, op(A)=A

SPARSE_OPERATION_TRANSPOSE

Transpose, op(A)=AT

SPARSE_OPERATION_CONJUGATE_TRANSPOSE

Conjugate transpose, op(A)=AH

descrA

Structure that specifies the sparse matrix properties.

Note

Currently, only SPARSE_MATRIX_TYPE_GENERAL is supported.

sparse_matrix_type_ttype specifies the type of sparse matrix.

SPARSE_MATRIX_TYPE_GENERAL

The matrix is processed as is.

SPARSE_MATRIX_TYPE_SYMMETRIC

The matrix is symmetric (only the requested triangle is processed).

SPARSE_MATRIX_TYPE_HERMITIAN

The matrix is Hermitian (only the requested triangle is processed).

SPARSE_MATRIX_TYPE_TRIANGULAR

The matrix is triangular (only the requested triangle is processed).

SPARSE_MATRIX_TYPE_DIAGONAL

The matrix is diagonal (only diagonal elements are processed).

SPARSE_MATRIX_TYPE_BLOCK_TRIANGULAR

The matrix is block-triangular (only the requested triangle is processed). This applies to BSR format only.

SPARSE_MATRIX_TYPE_BLOCK_DIAGONAL

The matrix is block-diagonal (only the requested triangle is processed). This applies to BSR format only.

sparse_fill_mode_tmode specifies the triangular matrix portion for symmetric, Hermitian, triangular, and block-triangular matrices.

SPARSE_FILL_MODE_LOWER

The lower triangular matrix is processed.

SPARSE_FILL_MODE_UPPER

The upper triangular matrix is processed.

sparse_diag_type_tdiag specifies the type of diagonal for non-general matrices.

SPARSE_DIAG_NON_UNIT

Diagonal elements must not be equal to 1.

SPARSE_DIAG_UNIT

Diagonal elements are equal to 1.

A

Handle which contains the sparse matrix A.

transB

Specifies operation opB() on the input matrix.

SPARSE_OPERATION_NON_TRANSPOSE

Non-transpose, opB(B)=B.

SPARSE_OPERATION_TRANSPOSE

Transpose, opB(B)=BT .

SPARSE_OPERATION_CONJUGATE_TRANSPOSE

Conjugate transpose, opB(B)=BH .

descrB

Structure that specifies the sparse matrix properties.

Note

Currently, only SPARSE_MATRIX_TYPE_GENERAL is supported.

sparse_matrix_type_ttype specifies the type of sparse matrix.

SPARSE_MATRIX_TYPE_GENERAL

The matrix is processed as is.

SPARSE_MATRIX_TYPE_SYMMETRIC

The matrix is symmetric (only the requested triangle is processed).

SPARSE_MATRIX_TYPE_HERMITIAN

The matrix is Hermitian (only the requested triangle is processed).

SPARSE_MATRIX_TYPE_TRIANGULAR

The matrix is triangular (only the requested triangle is processed).

SPARSE_MATRIX_TYPE_DIAGONAL

The matrix is diagonal (only diagonal elements are processed).

SPARSE_MATRIX_TYPE_BLOCK_TRIANGULAR

The matrix is block-triangular (only the requested triangle is processed). This applies to BSR format only.

SPARSE_MATRIX_TYPE_BLOCK_DIAGONAL

The matrix is block-diagonal (only the requested triangle is processed). This applies to BSR format only.

sparse_fill_mode_tmode specifies the triangular matrix portion for symmetric, Hermitian, triangular, and block-triangular matrices.

SPARSE_FILL_MODE_LOWER

The lower triangular matrix is processed.

SPARSE_FILL_MODE_UPPER

The upper triangular matrix is processed.

sparse_diag_type_tdiag specifies the type of diagonal for non-general matrices.

SPARSE_DIAG_NON_UNIT

Diagonal elements must not be equal to 1.

SPARSE_DIAG_UNIT

Diagonal elements are equal to 1.

B

Handle which contains the sparse matrix B.

alpha

Specifies the scalar alpha.

beta

Specifies the scalar beta.

layout

Describes the storage scheme for the dense matrix:

SPARSE_LAYOUT_COLUMN_MAJOR

Storage of elements uses column major layout.

SPARSE_LAYOUT_ROW_MAJOR

Storage of elements uses row major layout.

ldc

Leading dimension of matrix C.

Output Parameters

C

The resulting dense matrix.

Return Values

The function returns a value indicating whether the operation was successful, or the reason why it failed.

SPARSE_STATUS_SUCCESS

The operation was successful.

SPARSE_STATUS_NOT_INITIALIZED

The routine encountered an empty handle or matrix array.

SPARSE_STATUS_ALLOC_FAILED

The internal memory allocation failed.

SPARSE_STATUS_INVALID_VALUE

The input parameters contain an invalid value.

SPARSE_STATUS_EXECUTION_FAILED

The execution failed.

SPARSE_STATUS_INTERNAL_ERROR

An error occurred in the implementation of the algorithm.

SPARSE_STATUS_NOT_SUPPORTED

The requested operation is not supported.