Summary of the API differences between University of Basel (UB) PARDISO* and Intel® MKL PARDISO

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.

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



Not supported

 

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 ATx=b
=0, solve the system Ax=b
=1, solve the system ATx=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


有关编译器优化的更完整信息,请参阅优化通知