Skip to main content

cusparseScsric02

Function cusparseScsric02 

Source
pub unsafe extern "C" fn cusparseScsric02(
    handle: cusparseHandle_t,
    m: c_int,
    nnz: c_int,
    descrA: cusparseMatDescr_t,
    csrSortedValA_valM: *mut f32,
    csrSortedRowPtrA: *const c_int,
    csrSortedColIndA: *const c_int,
    info: csric02Info_t,
    policy: cusparseSolvePolicy_t,
    pBuffer: *mut c_void,
) -> cusparseStatus_t
Expand description

This function performs the solve phase of the computing the incomplete-Cholesky factorization with $0$ fill-in and no pivoting:

This function requires a buffer size returned by csric02_bufferSize(). The address of pBuffer must be a multiple of 128 bytes. If not, cusparseStatus_t::CUSPARSE_STATUS_INVALID_VALUE is returned.

Although csric02() can be done without level information, the user still needs to be aware of consistency. If csric02_analysis() is called with policy cusparseSolvePolicy_t::CUSPARSE_SOLVE_POLICY_USE_LEVEL, csric02() can be run with or without levels. On the other hand, if csric02_analysis() is called with cusparseSolvePolicy_t::CUSPARSE_SOLVE_POLICY_NO_LEVEL, csric02() can only accept cusparseSolvePolicy_t::CUSPARSE_SOLVE_POLICY_NO_LEVEL; otherwise, cusparseStatus_t::CUSPARSE_STATUS_INVALID_VALUE is returned.

Function csric02() reports the first numerical zero, including a structural zero. The user must call cusparseXcsric02_zeroPivot to know where the numerical zero is.

Function csric02() only takes the lower triangular part of matrix A to perform factorization. The matrix type must be cusparseMatrixType_t::CUSPARSE_MATRIX_TYPE_GENERAL, the fill mode and diagonal type are ignored, and the strictly upper triangular part is ignored and never touched. It does not matter if A is Hermitian or not. In other words, from the point of view of csric02()``A is Hermitian and only the lower triangular part is provided.

For example, suppose A is a real m times m matrix, the following code solves the precondition system M*y = x where M is the product of Cholesky factorization L and its transpose.

The function supports the following properties if pBuffer != NULL:

  • This function requires temporary extra storage that is allocated internally.
  • The routine supports asynchronous execution if the Stream Ordered Memory Allocator is available.
  • The routine supports CUDA graph capture if the Stream Ordered Memory Allocator is available.