Submitted by Sergey Solovev (Intel) on
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 online documentation for UB PARDISO (http://pardisoproject.org/ ) and for Intel MKL PARDISO (http://software.intel.com/enus/articles/intelmathkernellibrarydocumentation ).
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 Itaniumbased 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 
Twolevel 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 0based 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 righthand 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

Outofcore support of PARDISO (hard disc storage is used for solving systems with huge matrices that do not fit available RAM) 
Not supported

Supported 
Multirecursive iterative linear solver 
Supported 
Not supported; use Outofcore 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 onelevel factorization algorithm. = 1, PARDISO uses twolevel factorization algorithm. Default value. 
= 0, PARDISO uses the onelevel factorization algorithm. Default value = 1, PARDISO uses twolevel 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[i1]/perm(i)=1 means that the ith 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[i1]/perm(i)=1 means that the ith 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[i1]/perm(i)=1 means that the ith 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[i1]/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, multirecursive iterative algorithm is disabled; =1, multirecursive 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, onebased indexing: column and row indexing in arrays ia, ja, and perm starts from 1. Default value. = 1, zerobased indexing: column and row indexing in arrays ia, ja, and perm starts from 0. 
iparm[50]/iparm(51)  Use parallel distributedmemory solver 
Not used 
iparm[51]/iparm(52)  Number of compute nodes for the distributedmemory parallel solver 
Not used 
iparm[59]/iparm(60)  Not used  = 0, incore PARDISO (PARDISO uses only RAM/SWAP for solving systems) = 1, incore 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 outofcore (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, outofcore (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 Krylovsubspace iteration in iterative solver 
Not used 
101  No sufficient convergence in Krylovsubspace iteration within 25 iterations 
Not used 
102  Error in Krylovsubspace iteration 
Not used 
103  BreakDown in Krylovsubspace iteration 
Not used 
Add a Comment
Top(For technical discussions visit our developer forums. For site or software product issues contact support.)
Please sign in to add a comment. Not a member? Join today