mkl_sparse_sypr
mkl_sparse_sypr
Computes the symmetric product of three sparse matrices and stores the result in a newly allocated sparse matrix.
Syntax
sparse_status_t mkl_sparse_sypr
(
const sparse_operation_t
operation
,
const
sparse_matrix_t
A
,
const
sparse_matrix_t
B
,
const struct
matrix_descr
B
,
sparse_matrix_t
*C
,
const sparse_request_t
request
);
Include Files
- mkl_spblas.h
Description
The
mkl_sparse_sypr
routine performs a multiplication of three sparse matrices that results in a symmetric or Hermitian matrix, C
.orC:=A*B*opA(A)
depending on the matrix modifierC:=opA(A)*B*A
operation
.Here,
A
, B
, and C
are sparse matrices, where A
has a general structure while B
and C
are symmetric or Hermitian matrices. op
A
is the transpose (real precision) or conjugate transpose (complex precision) operator.This routine is not supported for sparse matrices in COO or CSC formats. This routine supports only CSR and BSR formats. In addition, it supports only the sorted CSR and sorted BSR formats for the input matrix. If the data is unsorted, call the mkl_sparse_order routine before either mkl_sparse_sypr or mkl_sparse_?_syprd.
Input Parameters
- operation
- Specifies operation on the input sparse matrices.SPARSE_OPERATION_NON_TRANSPOSENon-transpose case.C:=A*B*(AT) for real precisionC:=A*B*(AH) for complex precision.SPARSE_OPERATION_TRANSPOSETranspose case. This is not supported for complex matrices.C:=(AT)*B*ASPARSE_OPERATION_CONJUGATE_TRANSPOSEConjugate transpose case. This is not supported for real matrices.C:=(AH)*B*A
- A
- Handle which contains the sparse matrixA.
- B
- Handle which contains the sparse matrixB.
- descrB
- Structure specifying properties of the sparse matrix.sparse_matrix_type_ttypespecifies the type of a sparse matrixSPARSE_MATRIX_TYPE_SYMMETRICThe matrix is symmetric (only the specified triangle is processed).SPARSE_MATRIX_TYPE_HERMITIANThe matrix is Hermitian (only the specified triangle is processed).sparse_fill_mode_tmodespecifies the triangular matrix part.SPARSE_FILL_MODE_LOWERThe lower triangular matrix part is processed.SPARSE_FILL_MODE_UPPERThe upper triangular matrix part is processed.sparse_diag_type_tdiagspecifies the type of diagonal.SPARSE_DIAG_NON_UNITDiagonal elements cannot be equal to one.This routine also supportsC=AAT,Hwith these parameters:descrB.type=SPARSE_MATRIX_TYPE_DIAGONALdescrB.diag=SPARSE_DIAG_UNITIn this case, you do not need to allocate structure B. Use the routine as a 2-stage version of mkl_sparse_syrk.
- request
- Use this routine to specify if the computations should be performed in a single step or using the two-stage algorithm. See Two-stage Algorithm for Inspector-executor Sparse BLAS Routines for more information.SPARSE_STAGE_NNZ_COUNTOnlyrowIndex(BSR/CSR format) orcolIndex(CSC format) array of the matrix is computed internally. The computation can be extracted to measure the memory required for full operation.SPARSE_STAGE_FINALIZE_MULT_NO_VALFinalize computations of the matrix structure (values will not be computed). Use only after the call with SPARSE_STAGE_NNZ_COUNT parameter.SPARSE_STAGE_FINALIZE_MULTFinalize computation. Can be used after the call with the SPARSE_STAGE_NNZ_COUNT or SPARSE_STAGE_FINALIZE_MULT_NO_VAL. Can also be used when the matrix structure remains unchanged and only values of the resulting matrixCneed to be recomputed.SPARSE_STAGE_FULL_MULT_NO_VALPerform computations of the matrix structure.SPARSE_STAGE_FULL_MULTPerform the entire computation in a single step.
Output Parameters
- C
- Handle which contains the resulting sparse matrix. Only the upper-triangular part of the matrix is computed.
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
- Internal memory allocation failed.
- SPARSE_STATUS_INVALID_VALUE
- The input parameters contain an invalid value.
- SPARSE_STATUS_EXECUTION_FAILED
- Execution failed.
- SPARSE_STATUS_INTERNAL_ERROR
- An error in algorithm implementation occurred.
- SPARSE_STATUS_NOT_SUPPORTED
- The requested operation is not supported.