# How to use IPARM(4)/pre-conditioning in Pardiso?

## How to use IPARM(4)/pre-conditioning in Pardiso?

Hi, I have read the sparse info in the Pardiso manual on how to use iparm(4) to precondition the factorization, but can't get it to work. This is the background: I have to solve a system of identical sparsity structure (and slow/smooth evolution in time) thousands of time, so any possible speed up is essential. The system is structurally symmetric, so I have reduced the pardiso solver to initialize and do phase 11 only once, and then phase 22 and phase 33 at every time-step.

However, I am hoping that there could be further optimization, and using pre-conditioning with iparm(4) was suggested to me. I have tried using iparm(4) = 31 and 61 at either the phase 22 and/or just phase 33 but do not get proper results.

Any suggestions would be appreciated.
--Joachim

7 posts / 0 new
For more complete information about compiler optimizations, see our Optimization Notice.

Hi, Joachim,

Yes, you set parameters correctly. Could you clarify, what mean "do not get proper result"? Does norm of residual |r-Ax| change after turn on CGS (set less iparm(4)=61) or it is decreased, but not so much?

Could you set iparm(4)=61 before phase 33 and provide us with output parameter iparm(20) (CG/CGS diagnostic)?

Sergey

Quoting - Sergey Solovev (Intel)

Hi, Joachim,

Yes, you set parameters correctly. Could you clarify, what mean "do not get proper result"? Does norm of residual |r-Ax| change after turn on CGS (set less iparm(4)=61) or it is decreased, but not so much?

Could you set iparm(4)=61 before phase 33 and provide us with output parameter iparm(20) (CG/CGS diagnostic)?

Sergey

Hi , Thanks for your reply. By `not proper results' I mean that the solution computed when using pre-conditioning are less accurate / wrong than the ones computed without it. My system of linear equations computes as solution a pressure field (over 10 thousands of finite element edges), which is a smooth/continuous and only slowly changing field. As I mentioned in the original post, I am hoping that I can speed up the pardiso solver past performing phase 22 and phase 33 with the default iparm settings at each time step. To be honest though, I am not familiar with much of the method of CGS pre-conditioning; I'd like to use it if it's faster, but don't really know how to diagnose current issues (such as determining your suggestion|r-Ax| ).

What I have tried is either performing phase 22 only for the first 100 or so time-steps and then switching that step off in favour of iparm(4) = 61 (for instance) + phase 33; or performing phase 22 at every second or third time-step and preconditioning + phase 33 for the others.
As for your question: it does seem like the preconditioning itself succeeds and the output is in the range iparm(20) = 3 (foriparm(4) = 61) to iparm(20) = 22, when I triediparm(4) = 91 in an attempt to improve accuracy. [As a minor question: the CG preconditioning is only for symmetric, and not structurally-symmetric matrices, right?]

As extra information: I am trying to upgrade our solver to Pardiso from umfpack 2.2.1. Using the latter solver, the set-up was as follows:

For the first time-step we performed:

UM*21I: sets the default the control parameters for UM*2FA, UM*2RF,
and UM*2SO.

UM*2FA: factors A into PAQ=LU, finding the pivot order (P and Q)
based on both numerical and fill-reducing criteria. This
routine performs both symbolic and numerical factorization
in a single step.

For all subsequent time-steps, we used:

UM*2RF: factors A into PAQ=LU, using information (same P and Q and the
same symbolic factorization) from a prior call to UM*2FA.
Normally significantly faster than UM*2FA, since UM*2RF only
performs numerical factorization.

UM*2SO: solves a system of linear equations using the factors,
optionally performing iterative refinement.

Hi, it is not easy to understand the reason of problem. Yes, the CG preconditioning is only for symmetric matrices, CGS for unsymmetrical and structural symmetric matrices. The algorithm convergence significantly depends on matrix. The best way for resolution this issue is providing us with test case. If it is impossible, maybe code or pseudo code of using PARDISO?

Quoting - moortgatgmail.com
Hi, I have read the sparse info in the Pardiso manual on how to use iparm(4) to precondition the factorization, but can't get it to work. This is the background: I have to solve a system of identical sparsity structure (and slow/smooth evolution in time) thousands of time, so any possible speed up is essential. The system is structurally symmetric, so I have reduced the pardiso solver to initialize and do phase 11 only once, and then phase 22 and phase 33 at every time-step.

However, I am hoping that there could be further optimization, and using pre-conditioning with iparm(4) was suggested to me. I have tried using iparm(4) = 31 and 61 at either the phase 22 and/or just phase 33 but do not get proper results.

Any suggestions would be appreciated.
--Joachim

...did you guys get it to speed up?

tnx

hi ,phase=33,cpu nearly=0,anyone have this question?

what do you mean by  that? if cpu nearly like you said 0, is it bad?