Developer Reference for Intel® oneAPI Math Kernel Library for C
pardiso iparm Parameter
This table describes all individual components of the Intel® oneAPI Math Kernel Library (oneMKL) PARDISO iparm parameter. Components which are not used must be initialized with 0. Default values are denoted with an asterisk (*).
Component |
Description |
|---|---|
iparm[0] input |
Use default values.
|
iparm[1] input |
Fill-in reducing ordering for the input matrix. iparm[1] has the form iparm[1]= 10*L+K, where K denotes the type of reordering and L controls the aggressiveness of optimizations.
CAUTION:
You can control the parallel execution of the solver by explicitly setting the MKL_NUM_THREADS environment variable. If fewer OpenMP threads are available than specified, the execution may slow down instead of speeding up. If MKL_NUM_THREADS is not defined, then the solver uses all available processors.
NOTE:
If a two-level factorization algorithm is chosen (that is, iparm[23] =1), then only nested dissection algorithms are available (iparm[1] =2 or iparm[1] =3).
|
iparm[2] |
Reserved. Set to zero. |
iparm[3] input |
Preconditioned CGS/CG. This parameter controls preconditioned CGS [Sonn89] for nonsymmetric or structurally symmetric matrices and Conjugate-Gradients for symmetric matrices. iparm[3] has the form iparm[3] = \(10 \cdot L + K\).
|
iparm[4] input |
User permutation. This parameter controls whether user supplied fill-in reducing permutation is used instead of the integrated multiple-minimum degree or nested dissection algorithms. Another use of this parameter is to control obtaining the fill-in reducing permutation vector calculated during the reordering stage of Intel® oneMKL PARDISO. This option is useful for testing reordering algorithms, adapting the code to special applications problems (for instance, to move zero diagonal elements to the end of \(P\cdot A\cdot P^{ T }\)), or for using the permutation vector more than once for matrices with identical sparsity structures. For definition of the permutation, see the description of the perm parameter.
CAUTION:
You can only set one of iparm[4], iparm[30], and iparm[35], so be sure that the iparm[30] (partial solution) and the iparm[35] (Schur complement) parameters are 0 if you set iparm[4].
|
iparm[5] input |
Write solution on x.
NOTE:
The array x is always used.
|
iparm[6] output |
Number of iterative refinement steps performed. Reports the number of iterative refinement steps that were actually performed during the solve step. |
iparm[7] input |
Iterative refinement step. On entry to the solve and iterative refinement step, iparm[7] must be set to the maximum number of iterative refinement steps that the solver performs.
|
iparm[8] input |
Tolerance level for the backward error in the iterative refinement process. If set to a non-zero value, the following criterion is used for stopping the iterative refinement: ![]() where x is the computed solution and b is the right-hand side. A modulus sign on a vector or a matrix is used to indicate the vector or matrix obtained by replacing all entries by their moduli (absolute values). The i-th component of the scaled residual ![]() is computed for all equations for which the denominator is nonzero. If set to zero, the backward error is computed but it is not used as a stopping criterion and two other default checks (see the iparm[7] description) are used to determine when to stop the iterations. If msglvl = 1, the solver prints the number of performed iterative refinement steps, tolerance, and backward error values. |
iparm[9] input |
Pivoting perturbation. This parameter instructs Intel® oneMKL PARDISO how to handle small pivots or zero pivots for nonsymmetric matrices (mtype =11 or mtype =13) and symmetric matrices (mtype =-2, mtype =-4, or mtype =6). For these matrices the solver uses a complete supernode pivoting approach. When the factorization algorithm reaches a point where it cannot factor the supernodes with this pivoting strategy, it uses a pivoting perturbation strategy similar to [Li99] , [Schenk04]. Small pivots are perturbed with \(eps = 10^{-\text{iparm[9]}}\). The magnitude of the potential pivot is tested against a constant threshold of \(alpha = eps\cdot ||A2||_{inf},\) where \(eps = 10^{(-\text{iparm[9]})}\), \(A2 = P\cdot P_{MPS}\cdot D_{r}\cdot A\cdot D_{c}\cdot P\), and \(||A2||_{inf}\) is the infinity norm of the scaled and permuted matrix \(A\). Any tiny pivots encountered during elimination are set to the \(sign(l_{ I I } )\cdot eps\cdot ||A2||_{inf}\), where \(l_{ I I }\) is the tiny pivot (diagonal) element at the \(I\)-th row. This approach trades off some numerical stability for the ability to prevent pivots from becoming too small.
|
iparm[10] input |
Scaling vectors. Intel® oneMKL PARDISO uses a maximum weight matching algorithm to permute large elements on the diagonal and to scale so that the diagonal elements are equal to 1 and the absolute values of the off-diagonal entries are less than or equal to 1. This scaling method is applied only to nonsymmetric matrices (mtype = 11 or mtype = 13). The scaling can also be used for symmetric indefinite matrices (mtype = -2, mtype =-4, or mtype = 6) when the symmetric weighted matchings are applied ( iparm[12] = 1). Use iparm[10] = 1 (scaling) and iparm[12] = 1 (matching) for highly indefinite symmetric matrices, for example, from interior point optimizations or saddle point problems.
NOTE:
In the analysis phase (phase=11) you must provide the numerical values of the matrix \(A\) in array a in case of scaling and symmetric weighted matching.
|
iparm[11] input |
Solve with transposed or conjugate transposed matrix \(A\).
NOTE:
For real matrices, the terms transposed and conjugate transposed are equivalent.
|
iparm[12] input |
Improved accuracy using (non-) symmetric weighted matching. Intel® oneMKL PARDISO can use a maximum weighted matching algorithm to permute large elements close the diagonal. This strategy adds an additional level of reliability to the factorization methods and complements the alternative of using more complete pivoting techniques during the numerical factorization.
|
iparm[13] output |
Number of perturbed pivots. After factorization, contains the number of perturbed pivots for the matrix types: 1, 3, 11, 13, -2, -4 and 6. |
iparm[14] output |
Peak memory on symbolic factorization. The total peak memory in kilobytes that the solver needs during the analysis and symbolic factorization phase. This value is only computed in phase 1. |
iparm[15] output |
Permanent memory on symbolic factorization. Permanent memory from the analysis and symbolic factorization phase in kilobytes that the solver needs in the factorization and solve phases. This value is only computed in phase 1. |
iparm[16] output |
Size of factors/Peak memory on numerical factorization and solution. This parameter provides the size in kilobytes of the total memory consumed by in-core Intel® oneMKL PARDISO for internal floating point arrays. This parameter is computed in phase 1. See iparm[62] for the OOC mode. The total peak memory consumed by Intel® oneMKL PARDISO is max(iparm[14], iparm[15] + iparm[16]) |
iparm[17] input/output |
Report the number of non-zero elements in the factors.
|
iparm[18] input/output |
Report number of floating point operations (in \(10^6\) floating point operations) that are necessary to factor the matrix \(A\).
|
iparm[19] output |
Report CG/CGS diagnostics.
|
iparm[20] input |
Pivoting for symmetric indefinite matrices.
NOTE:
Use iparm[10] = 1 (scaling) and iparm[12] = 1 (matchings) for highly indefinite symmetric matrices, for example from interior point optimizations or saddle point problems.
|
iparm[21] output |
Inertia: number of positive eigenvalues. Intel® oneMKL PARDISO reports the number of positive eigenvalues for symmetric indefinite matrices. |
iparm[22] output |
Inertia: number of negative eigenvalues. Intel® oneMKL PARDISO reports the number of negative eigenvalues for symmetric indefinite matrices. |
iparm[23] input |
Parallel factorization control.
|
iparm[24] input |
Parallel forward/backward solve control.
|
iparm[25] |
Reserved. Set to zero. |
iparm[26] input |
Matrix checker.
|
iparm[27] input |
Single or double precision Intel® oneMKL PARDISO. See iparm[7] for information on controlling the precision of the refinement steps.
IMPORTANT:
The iparm[27] value is stored in the Intel® oneMKL PARDISO handle between Intel® oneMKL PARDISO calls, so the precision mode can be changed only during phase 1.
|
iparm[28] |
Reserved. Set to zero. |
iparm[29] output |
Number of zero or negative pivots. If Intel® oneMKL PARDISO detects zero or negative pivot for mtype =2 or mtype =4 matrix types, the factorization is stopped. Intel® oneMKL PARDISO returns immediately with an error = -4, and iparm[29] reports the number of the equation where the zero or negative pivot is detected.
NOTE:
The returned value can be different for the parallel and sequential version in case of several zero/negative pivots.
|
iparm[30] input |
Partial solve and computing selected components of the solution vectors. This parameter controls the solve step of Intel® oneMKL PARDISO. It can be used if only a few components of the solution vectors are needed or if you want to reduce the computation cost at the solve step by utilizing the sparsity of the right-hand sides. To use this option the input permutation vector define perm so that when perm(i)=1 it means that either the i-th component in the right-hand sides is nonzero, or the i-th component in the solution vectors is computed, or both, depending on the value of iparm[30]. The permutation vector perm must be present in all phases of Intel® oneMKL PARDISO software. At the reordering step, the software overwrites the input vector perm by a permutation vector used by the software at the factorization and solver step. If m is the number of components such that perm(i) = 1, then the last m components of the output vector perm are a set of the indices i satisfying the condition perm(i) = 1 on input.
NOTE:
Turning on this option often increases the time used by Intel® oneMKL PARDISO for factorization and reordering steps, but it can reduce the time required for the solver step.
IMPORTANT:
You can use this feature for both in-core and out-of-core Intel® oneMKL PARDISO as long as iparm[23] =1. Otherwise, you cannot use partial solve for out-of-core mode and you will need to set iparm[59] =0 for in-core mode. Set the parameters iparm[7] (iterative refinement steps), iparm[3] (preconditioned CGS), iparm[4] (user permutation), and iparm[35] (Schur complement) to 0 as well.
|
iparm[31] - iparm[32] |
Reserved. Set to zero. |
iparm[33] input |
Optimal number of OpenMP threads for conditional numerical reproducibility (CNR) mode. Intel® oneMKL PARDISO reads the value of iparm[33] during the analysis phase (phase 1), so you cannot change it later.
CAUTION:
Because Intel® oneMKL PARDISO uses C random number generator facilities during the analysis phase (phase 1) you must take these precautions to get numerically reproducible results:
NOTE:
CNR is only available for the in-core version of Intel® oneMKL PARDISO and the non-parallel version of the nested dissection algorithm. You must also:
Otherwise Intel® oneMKL PARDISO does not produce numerically repeatable results even if CNR is enabled for Intel® oneMKL using the functionality described in Support Functions for CNR.
|
iparm[34] input |
One- or zero-based indexing of columns and rows.
|
iparm[35] input/output |
Schur complement matrix computation control. To calculate this matrix, you must set the input permutation vector perm to a set of indexes such that when perm(i) = 1, the i-th element of the initial matrix is an element of the Schur matrix.
NOTE:
Schur complement may be inaccurate or incorrect if pivots are detected. Please, check the output of iparm[28].
CAUTION:
You can only set one of iparm[4], iparm[30], and iparm[35], so be sure that the iparm[4] (user permutation) and the iparm[30] (partial solution) parameters are 0 if you set iparm[35].
|
iparm[36] input |
Format for matrix storage.
|
iparm[37] |
Reserved. Set to zero. |
iparm[38] |
Enable low rank update (see Low Rank Update) to accelerate factorization for multiple matrices with identical structure and similar values.
|
iparm[39] - iparm[41] |
Reserved. Set to zero. |
iparm[42] |
Control parameter for the computation of the diagonal of inverse matrix.
|
iparm[43] - iparm[54] |
Reserved. Set to zero. |
iparm[55] |
Diagonal and pivoting control.
|
iparm[56] - iparm[58] |
Reserved. Set to zero. |
iparm[59] input |
Intel® oneMKL PARDISO mode. iparm[59] switches between in-core (IC) and out-of-core (OOC) Intel® oneMKL PARDISO. OOC can solve very large problems by holding the matrix factors in files on the disk, which requires a reduced amount of main memory compared to IC. Unless you are operating in sequential mode, you can switch between IC and OOC modes after the reordering phase. However, you can get better Intel® oneMKL PARDISO performance by setting iparm[59] before the reordering phase. The amount of memory used in OOC mode depends on the number of OpenMP threads.
NOTE:
When iparm[59] > 0, use the MKL_PARDISO_OOC_FILE_NAME environment variable to store factors.
WARNING:
Do not increase the number of OpenMP threads used for cluster_sparse_solver between the first call and the factorization or solution phase. Because the minimum amount of memory required for out-of-core execution depends on the number of OpenMP threads, increasing it after the initial call can cause incorrect results.
|
iparm[60] - iparm[61] |
Reserved. Set to zero. |
iparm[62] output |
Extra size of the minimum OOC memory required for numerical factorization and solution on top of the memory required in phase 1. This parameter provides the size in kilobytes of the minimum memory required by OOC Intel® oneMKL PARDISO for internal floating point arrays. This parameter is computed in phase 1. The minimum RAM requirement for OOC mode is given as max(iparm[14], iparm[15]+iparm[62]); that is, for OOC mode to run, ensure that MKL_PARDISO_OOC_MAX_CORE_SIZE > max(iparm[14], iparm[15]+iparm[62]). |
iparm[63] |
Reserved. Set to zero. |
Product and Performance Information |
|---|
Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex. Notice revision #20201201 |

