Hi all,
In many mkl_sparse_XXX routines (version 11.3), there is a a parameter of type matrix_descr, just like :
sparse_status_t mkl_sparse_s_trsv (sparse_operation_t operation, float alpha, const sparse_matrix_t A, struct matrix_descr descr, const float *x, float *y);
The explanation of this parameter in manual is:
descr : Structure specifying sparse matrix properties. ......But it is confusing. Following is the code snippet in MKL example sparse_trsv.c,
//******************************************************************************* // Declaration and initialization of parameters for sparse representation of // the matrix A in the compressed sparse row format: //******************************************************************************* #define M 5 #define N 5 #define NNZ 13 //******************************************************************************* // Sparse representation of the matrix A //******************************************************************************* double csrVal[NNZ] = { 1.0, -1.0, -3.0, -2.0, 5.0, 4.0, 6.0, 4.0, -4.0, 2.0, 7.0, 8.0, -5.0 }; MKL_INT csrColInd[NNZ] = { 0, 1, 3, 0, 1, 2, 3, 4, 0, 2, 3, 1, 4 }; MKL_INT csrRowPtr[M+1] = { 0, 3, 5, 8, 11, 13 }; // Descriptor of main sparse matrix properties struct matrix_descr descrA; // Structure with sparse matrix stored in CSR format sparse_matrix_t csrA; ...... // Create matrix descriptor descrA.type = SPARSE_MATRIX_TYPE_TRIANGULAR; descrA.mode = SPARSE_FILL_MODE_LOWER; descrA.diag = SPARSE_DIAG_UNIT; // Compute y = alpha * A^{-1} * x mkl_sparse_d_trsv ( SPARSE_OPERATION_NON_TRANSPOSE, alpha, csrA, descrA, x, y );
Obviously, the matrix csrA is not a triangular matrix, and the diagnoal is not unit. Why set the properties of descrA to TRIANGULAR and DIAG_UNIT?
If I change the properties to other option, for example:
descrA.type = SPARSE_MATRIX_TYPE_GENERAL; descrA.diag = SPARSE_DIAG_NON_UNIT;
Now it can not get correct result.
How to setting the properties of matrix_descr correctly?
Best regards,
Tianxiong Lu