Incomplete-LU and Cholesky Preconditioned


I tried to implement the CG-code given by this Paper “Incomplete-LU and Cholesky Preconditioned Iterative Methods Using CUSPARSE and CUBLAS” from NVIDIA. But on my matrix it does not converged. In each iteration step the value of rho increases in huge steps. After abaut 100 steps, its number^(199) and then #QNAN. So something must be wrong, because I know that a CG without preconditioner will converge. Also a ILU(0) with cg will converge(both variants a working well for me). So I think there must be a failure on the data structur. Perhaps somebody has get it worked and can answer my following questions:

  1. I have to copy the upper triangular an GPU. Have I to split the resulting matrix from ILU(0) using a new csr matrix wehere only the upper triangular is in?(I did it so)
  2. Which matrixtype I have to set for descrA/descrpR/descrR(GENERAL/TRIANGUALR/TRIANGULAR)?
  3. Are there special initialisations for the cusparseDcsr_solve?

I attached the paper


I got it working. But it isn’t very fast I need 6s to solve with this method. Using a normal PCG on GPU with an ILU(0) on CPU it takes 2,6s. So this version is not very well…

I’m trying to do the same thing than you but when I implement the preconditioned ILU from the sample in the SDK, it does not converge. Can you explain me how you constructed ILU, please ?
I’m using CUDA 5.0.

Hi Jürgen!!!

I’m having the same problem!!!
I also think there must be a failure on the data structur!!!

CG works very well! But, PCG (ILU(0) and ICP) not converge!!!
I think the problem is in the function: incomplete cholesky and incomplete LU!!!

Obs: I used a small matrix to check the values. In this case, some values the output function were incorrect when I aplly: cusparseScsric0. The results: #QNAN0!

Please, I need help too!!!

Please check:

Make sure that your matrix has the correct base