# what does cusparse<t>csrsv2_analysis() do?

In cuSPARSE, you can solve a sparse triangular linear system by calling cusparse<t>csrsv2_solve(). However, you need to call cusparse<t>csrsv2_bufferSize() and cusparse<t>csrsv2_analysis() first.

From what I read in the doc, it seems:

• csrsv2 might need additional memory, and csrsv2_bufferSize() tells you how much that should be.
• csrsv2_analysis() analyze the sparsity pattern of the coefficient matrix. It may or may not improve the performance of csrsv2_solve().

The documentation says:

• csrsv2_analysis() reports a structural zero and computes level information.
• The level information may not improve the performance. For example, a tridiagonal matrix has no parallelism.
• csrsv2_solve() reports the first numerical zero, including a structural zero.

So here is what I don't understand:

• What are those things: structural zero, numerical zero, level information?
• And why tridiagonal matrices have no parallellism? What does parallelism mean here?

I guess structural zero and numerical zero have something to do with the singularity of the matrix, but I need clarification on that.

Structural and numerical zeros describe how zero values in your matrix are stored. Structural zeros are zeros that are implied to be zero because they are not present in the data structure. Numerical zeros are zeros that are explicitly stored. For example, the matrix $$\begin{bmatrix} 0 & 1 \\ 0 & 0 \end{bmatrix}$$ can be stored in coordinate format as
i  j  value