New ILP64 ( 64-bit integer) pardiso_64 interface of PARDISO is now available

ID 659915
Updated 8/13/2017
Version Latest
Public

author-image

By

Description:

pardiso_64 is an alternative ILP64 (64-bit integer) interface of Intel® MKL PARDISO.  pardiso_64 API is equal to Intel Pardiso API, but it accepts and returns all INTEGER data as INTEGER*8.

The main idea behind the introducing pardiso_64 entry point is a possibility to have ILP64 functionality of Intel MKL PARDISO in programs which linked with regular (LP64) MKL libraries. 

pardiso_64 is intended for solving problems with huge original matrices (with the number of non-zero elements ~500 million and more).

Syntax of pardiso_64: 

As well as MKL PARDISO, pardiso_64 is declared in mkl_pardiso.f77 for FORTRAN 77 interface, in mkl_pardiso.f90 for Fortran 90 interface, and in mkl_pardiso.h for C interface.

The syntax of this new API for Fortran:

call pardiso_64 (pt, maxfct, mnum, type, phase, n, a, ia, ja, perm, nrhs, iparm, msglvl, b, x, error)

and

correspondingly for C : 

pardiso_64 (pt, &maxfct, &mnum, &mtype, &phase, &n, a, ia, ja, perm, &nrhs, iparm, &msglvl, b, x, &error);

 

See as an example the declaration of pardiso_64 into MKL PARDISO C header file "mkl_pardiso.h"

void pardiso_64 ( _MKL_DSS_HANDLE_t, long long int *, long long int *,   long long int *, long long int *, long long int *,                  void *,  long long int *,  long long int *, long long int *, long long int *, long long int *, long long int *, void *, void *,  long long int *);

 

Compiling and linking with pardiso_64:

  • No changes need to be done in the case when you use ILP64 interfaces. The same linking line as for ordinary MKL PARDISO API.  Also note that in this case calls to pardiso and pardiso_64 have no differences.
  • In the case of LP64 interfaces, before calling pardiso_64, users have to copy all original INTEGER data to INTEGER*8 and  pass these parameters to pardiso_64.
  • pardiso_64 is supported only in the 64-bit libraries
    • If pardiso_64 is called from the 32-bit libraries, it returns error =-12

Parallel Direct Sparse Solver for Clusters

     Since the MKL v. 11.3 update 2, the new cluster_sparse_solver_64 API has been added. The main idea behind this API is the similar like with pardsio_64:  This API allows to have ILP64 functionality of Parallel Direct Sparse Solver for Clusters  ( aka Intel CPardiso) in programs which linked with regular (LP64) Intel® MKL functionality. This API is equal to cluster_sparse_solver API, but it accepts only INTEGER data as INTEGER*8.   

The declaration of this API you may see into mkl_cluster_sparse_solver.f90, mkl_cluster_sparse_solver.fi and mkl_cluster_sparse_solver.h header files.

Here is an example of the C declaration of cluster_sparse_solver_64:

void cluster_sparse_solver_64( void *, const long long int *, const long long int *, const long long int *, const long long int *, const long long int *, const void *, const long long int *, const long long int *, long long int *, const long long int *, long long int *, const long long int *,  void *,  void *, const int *, long long int *);

Also, you there are 4 examples show how to call these interfaces from C and from Fortran.

See <mkl_example_directory>\cluster_sparse_solverC\ (cl_solver_unsym_complex_c.c, cl_solver_sym_sp_0_based_c.c, cl_solver_unsym_distr_c.c and cl_solver_unsym_c.c) and the same examples but for Fortran interface ( see <mkl_example_directory> \cluster_sparse_solverF\

Notes:

-  pardiso_64 is available in Intel® MKL version 10.2.6 and higher.