Summary of the API differences between University of Basel (UB) PARDISO* and Intel® MKL PARDISO
By Sergey Solovev (Intel), published on August 24, 2012
This is a computer translation of the original content. It is provided for general information only and should not be relied upon as complete or accurate.
The release of PARDISO* 4.0.0 from the University of Basel (UB) is not backward compatible with PARDISO from the Intel® Math Kernel Library 10.3 (Intel® MKL) and earlier, and thus introduces some incompatibilities with the Intel MKL PARDISO implementation. This article outlines where the interfaces have diverged in tables which describe the differences between UB and Intel MKL interfaces, functionalities, and errors.
Table 2: Functionality integrated since UB PARDISO 4.0.0 and Intel MKL 10.3
The article is organized as follows:
- Table 1 shows differences in external functions.
- Table 2 presents functionality supported since UB PARDISO 4.0 and Intel MKL 10.3.
- The input/output values of iparm correlated with this functionality are presented in Table 3.
- Output error differences are presented in Table 4.
The comparison is based on available on-line documentation for UB PARDISO (http://pardiso-project.org/ ) and for Intel MKL PARDISO (http://software.intel.com/en-us/articles/intel-math-kernel-library-documentation ).
Note: Both the UB and Intel MKL functionality and interfaces may vary from version to version, so it is important to know the exact versions of UB and Intel MKL PARDISO that you want to compare.
Note for users of Itanium®-based systems: Intel MKL 10.3 version does not support Itanium-based systems. For such systems, use Intel MKL 10.2.7, which has functionality identical with Intel MKL 10.3 (except the "Support 0 based indexing in input data" feature). |
Table 1: Interface differences
Description of functionality | UB PARDISO since 4.0.0 | Intel MKL PARDISO since Intel MKL 10.3 |
Main computational routine | C: PARDISO (pt, &maxfct, &mnum, &mtype, &phase, &n, a, ia, ja, &perm, &nrhs, iparm, &msglvl, b, x, &error, &dparm); double dparm [64]; Fortran: pardiso (pt, maxfct, mnum, mtype, phase, n, a, ia, ja, perm, nrhs, iparm, msglvl, b, x, error ,dparm) REAL*8 dparm(64) dparm parameter added in UB 4.0.0 | C: PARDISO (pt, &maxfct, &mnum, &mtype, &phase, &n, a, ia, ja, &perm, &nrhs, iparm, &msglvl, b, x, &error); Fortran: pardiso (pt, maxfct, mnum, mtype, phase, n, a, ia, ja, perm, nrhs, iparm, msglvl, b, x, error) |
DSS interfaces (simplified PARDISO interfaces for general functionality) | Not supported | C, Fortran: dss_create(handle, opt ); dss_define_structure(handle, opt, rowIndex, nRows, nCols, columns, nNonZeros); dss_reorder(handle, opt, perm); dss_factor_real(handle, opt, rValues ); dss_factor_complex(handle, opt, cValues); dss_solve_real(handle, opt, rRhsValues, nRhs, rSolValues); dss_solve_complex(handle, opt, cRhsValues, nRhs, cSolValues); dss_delete(handle, opt); dss_statistics(handle, opt, statArr, retValues); mkl_cvt_to_null_terminated_str (destStr, destLen, srcStr); Implemented in Intel MKL version 10.3 and higher |
ILP64 support (all integer data are defined as long long int in C and INTEGER*8 in Fortran) | Not supported | C: pardiso_64 (pt, &maxfct, &mnum, &mtype, &phase, &n, a, ia, ja, &perm, &nrhs, iparm, &msglvl, b, x, &error); Fortran: pardiso_64 (pt, maxfct, mnum, mtype, phase, n, a, ia, ja, perm, nrhs, iparm, msglvl, b, x, error) Implemented in Intel MKL 10.3 and higher |
Control PARDISO environment by external functions | Not supported | pardiso_setenv(); pardiso_getenv(); Implemented in MKL 10.3 and higher |
Initial step of PARDISO to set default values | pardisoinit(pt, mtype, solver, iparm, dparm, error); Implemented in UB PARDISO* version 4.0.0 and higher | pardisoinit(pt, mtype, iparm); Implemented in MKL 10.3 Update 5 and higher |
Check user data and print input matrix statistic | pardiso_chkmatrix() pardiso_chkvec() pardiso_printstats() Implemented in UB 4.1.2 and higher | Not supported; Matrix checker implemented by iparm switching in MKL 10.3 and higher |
Table 2: Functionality integrated since UB PARDISO 4.0.0 and Intel MKL 10.3
Name of functionality | UB PARDISO since 4.0.0 | Intel MKL PARDISO since Intel MKL 10.3 |
ILP64 support (all integer data are defined as long long int in C and INTEGER*8 in Fortran) to solve huge systems of linear algebraic equations |
| Supported |
Solving system with transpose/conjugate matrix | Supported | Supported since MKL 10.3 Update 5 |
Two-level parallel numerical factorization | Supported; Full support since UB PARDISO 4.1.2 | Supported |
Parallel solving step | Supported | Supported since MKL 10.3 Update 5 |
Splitting of forward/backward solve | Supported(by iparm(26)) | Supported (by phase=331,332,333) |
Support of 0-based indexing in the input data | Not supported | Supported (no support in 10.2 Update 6) |
Control of the size of the supernodes | Supported | Not supported |
Partial solve for sparse right-hand side and sparse solution | Supported only for the case when right hand side (rhs) is sparse and the solution is sparse | Supported: More options exist:right hand side (rhs) is sparse and the solution is sparse;rhs is sparse and the solution is dense; rhs is dense and the solution is sparse (since MKL 10.3 Update 3) |
Cluster support of PARDISO | Symmetric indefinite matrix support since UB PARDISO 4.1.2 | Not supported |
Out-of-core support of PARDISO (hard disc storage is used for solving systems with huge matrices that do not fit available RAM) | Not supported | Supported |
Multi-recursive iterative linear solver | Supported | Not supported; use Out-of-core mode instead |
Determinant of a real symmetric indefinite matrix | Supported | Not supported |
Identical solution independent from the number of processors | Supported | Not supported |
Checking correctness of initial user matrix and vectors; Printing initial user matrix statistic | Supported since UB PARDISO 4.1.2 (by additional functions) | Matrix checker implemented by iparm(27) switching in MKL 10.3 and higher; Vector checker is not supported; Printing initial user matrix statistic is not supported |
Table 3: iparm entries differences
iparm entry in C/Fortran | UB PARDISO since 4.0.0 | Intel MKL PARDISO since Intel MKL 10.3 |
iparm[1]/iparm(2) | =0, minimal degree algorithm is applied =2, nested algorithm is applied | =0, minimal degree algorithm is applied =2, nested algorithm is applied =3, parallel nested algorithm is applied |
iparm[2]/iparm(3) | Number of processors | Not used (MKL environment variable MKL_NUM_THREADS is used to set the number of computational threads) |
iparm[11]/iparm(12) | =0, solve the system Ax=b =1, solve the system A^{T}x=b | =0, solve the system Ax=b =1, solve the system A^{T}x=b =2, solve the system A*x=b (since MKL 10.3 Update 5) |
iparm[16]/iparm(17) | Memory needed for numerical factorization and solution. Returned after phase 22. | Memory needed for numerical factorization and solution. Returned after phase 22. note - since MKL 10.3 Update 5 this parameter is calculated in phase 11 and available after it. |
iparm[23]/iparm(24) | = 0, PARDISO uses the one-level factorization algorithm. = 1, PARDISO uses two-level factorization algorithm. Default value. | = 0, PARDISO uses the one-level factorization algorithm. Default value = 1, PARDISO uses two-level factorization algorithm. |
iparm[24]/iparm(25) | = 0, PARDISO uses the parallel algorithm for solve step. Default value. = 1, PARDISO uses the sequential forward and backward solve. | = 0, PARDISO uses the parallel algorithm for solve step. = 1, PARDISO uses the sequential forward and backward solve. Default value. Since MKL 10.3 Update 5 |
iparm[25]/iparm(26) | Splitting solving step | Not used (splitting solving step is manipulated by phase=331,332,333) |
iparm[26]/iparm(27) | Not used (matrix checker implemented by external function pardiso_chkmtrx since UB PARDISO 4.1.2) | = 0, matrix checker is disabled = 1, matrix checker is enabled |
iparm[27]/iparm(28) | = 0, sequential version of METIS* reordering is used = 1, parallel version of METIS* reordering is used | = 0, double precision version of PARDISO is used = 1, single precision version of PARDISO is used note: sequential/parallel version of METIS* reordering is controlled by iparm[1]/iparm(2) |
iparm[28]/iparm(29) | = 0, 64bit (i.e. double precision) version of factorization is used = 1, 32bit (i.e. single precision) version of factorization is used | Not used Note: single/double precision version of Intel® MKL PARDISO is controlled by iparm[27]/iparm(28). This version is used instead of 32bit/64bit version of factorization of UB PARDISO*. |
iparm[29]/iparm(30) | Input parameter that controls maximum size of supernode in PARDISO | Output parameter that returns the number of zero and negative pivots |
iparm[30]/iparm(31) | = 0, disables partial solve of Ax=b. Default value. = 1, the right hand side is assumed to be sparse, perm[i-1]/perm(i)=1 means that the i-th component of the right hand side is nonzero, and this component of the solution vector is computed. | = 0, disables partial solve of Ax=b. Default value. = 1, the right hand side is assumed to be sparse, perm[i-1]/perm(i)=1 means that the i-th component of the right hand side is nonzero, and this component of the solution vector is computed. = 2, the right hand side is assumed to be sparse, perm[i-1]/perm(i)=1 means that the i-th component of the right hand side is nonzero, and all components of the solution vector are computed. = 3, the right hand side can be of any type. If perm[i-1]/perm(i)=1, the i -th component of the solution vector is computed (option 3 supported since MKL 10.3 Update 3). |
iparm[31]/iparm(32) | =0, multi-recursive iterative algorithm is disabled; =1, multi-recursive iterative algorithm is enabled | Not used |
iparm[32]/iparm(33) | Input: =1, compute the determinant of a real symmetric indefinite matrices and return the result in dparm[32]/dparm(33). Output: the parameter returns the natural logarithm of the determinant of a real symmetric indefinite matrix | Not used |
iparm[33]/iparm(34) | = 0, identical solution independent from the number of processors disabled = 1, identical solution independent from the number of processors enabled | Not used |
iparm[34]/iparm(35) | Not used | = 0, one-based indexing: column and row indexing in arrays ia, ja, and perm starts from 1. Default value. = 1, zero-based indexing: column and row indexing in arrays ia, ja, and perm starts from 0. |
iparm[50]/iparm(51) | Use parallel distributed-memory solver | Not used |
iparm[51]/iparm(52) | Number of compute nodes for the distributed-memory parallel solver | Not used |
iparm[59]/iparm(60) | Not used | = 0, in-core PARDISO (PARDISO uses only RAM/SWAP for solving systems) = 1, in-core PARDISO is used if the total memory needed for storing the matrix factors is less than sum of two values of the environment variables MKL_PARDISO_OOC_MAX_CORE_SIZE and MKL_PARDISO_OOC_MAX_SWAP_SIZE. Otherwise out-of-core (OOC) PARDISO is used, i.e. PARDISO can use both RAM/SWAP and hard disc storage for solving systems with huge matrices that do not fit available RAM/SWAP = 2, out-of-core (OOC) PARDISO The OOC PARDISO can solve very large problems by holding the matrix factors in files on the disk. The amount of RAM required by OOC PARDISO is significantly reduced. |
iparm[60]/iparm(61) | Not used | Output parameter that returns total peak memory in analysis and factorization phases. Not used since MKL 10.3 Update 5. |
iparm[61]/iparm(62) | Not used | Output parameter that returns total double precision memory consumption in analysis and factorization phases. Not used since MKL 10.3 Update 5. |
iparm[62]/iparm(63) | Not used | Output parameter that returns minimum memory required by OOC PARDISO for internal floating point arrays. This parameter is computed in phase 1. |
Table 4: Output Error value differencies
Error value | UB PARDISO since 4.0.0 | Intel MKL PARDISO since Intel MKL 10.3 |
-9 | Not used | Not enough memory for OOC |
-10 | No license file pardiso.lic found | Failure to open OOC temporary files |
-11 | License expired | IO failure in the OOC data file |
-12 | Wrong username or hostname | Not used |
-100 | Reached maximum number of Krylov-subspace iteration in iterative solver | Not used |
-101 | No sufficient convergence in Krylov-subspace iteration within 25 iterations | Not used |
-102 | Error in Krylov-subspace iteration | Not used |
-103 | Break-Down in Krylov-subspace iteration | Not used |
For more complete information about compiler optimizations, see our Optimization Notice.