Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

Solver settings in pardiso?


Hi All,

My program have two solvers, solver A is based on Bi-CGSTAB acceleration that was developed by someone else before,  and another one (solver B) is pardiso. I found for Pardiso works fine as solver A for most of the time, but it run much slower than solver A if I use 1 or two threads.

The following settings is used in solver A:

maximum number of solver iterations:   100

solver residual tolerance: 1.0E-7

solver update tolerance: 1.0E-7.

I try to use this settings in pardiso as follows:

iparm(8) = 100      !numbers of iterative refinement steps

iparm(10) = 7       !perturbe the pivot elements with 1E-7

Is this correct? And how to set the residual tolerance?

Thanks and regards,

PS: other parameters

        iparm= 0
        iparm(1) = 1 ! no solver default
        iparm(2) = 3 ! fill-in reordering from METIS ,0-MIN DEGREE, 2-METIS, 3-OPENMP VERSION
        iparm(3) = 0 ! numbers of processors. Input the next call mkl_set_dynamic(0), mkl_set_num_threads(n);    
        iparm(4) = 0 ! 0-no iterative-direct algorithm; 10*L+1 - CGS; 10*L+2 - CG; 10^-L is the tolerance.
        iparm(5) = 0 ! no user fill-in reducing permutation
        iparm(6) = 0 ! if == 0, the array of b is replaced with the solution x.
        iparm(7) = 0 ! not in use
        iparm(9) = 0 ! not in use
        iparm(11) = 1 ! use nonsymmetric permutation and scaling MPS
        iparm(12) = 0 ! not in use
        iparm(13) = 1 ! maximum weighted matching algorithm is switched-on (default for non-symmetric)
        iparm(14) = 0 ! Output: number of perturbed pivots
        iparm(15) = 0 ! not in use
        iparm(16) = 0 ! not in use
        iparm(17) = 0 ! not in use
        iparm(18) = -1 ! Output: number of nonzeros in the factor LU
        iparm(19) = -1 ! Output: Mflops for LU factorization
        iparm(20) = 0  ! Output: Numbers of CG Iterations
        iparm(27) = 0   !check matrix error, 0-without check, 1-check
        maxfct = 1        
        mnum = 1        
        nrhs = 1        
        error = 0 ! initialize error flag       
        msglvl = 0 ! print statistical information       
        mtype = 11 ! real unsymmetric


0 Kudos
2 Replies

What is the problem size?

0 Kudos


Would you please let us know how big the sparse system you're solving is?

Bi-CGSTAB is an iterative method, while PARDISO is a direct sparse solver. An iterative solver could be faster than a direct solver sometimes, especially when there is a good understanding of the initial conditions and/or a good preconditioner. Please share more details about your problem and your Bi-CGSTAB solver such that we can provide more meaningful answer.


0 Kudos