Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

Questions with pardiso

Customer__Intel2
Beginner
810 Views

Hello everyone,

I met a tricky problem when solving a sparse unsymmetric complex matrics with fotran pardiso MKL within Windows environment:

I installed Mircosoft Visual Studio  2012 and Intel Parallel Studio XE 2013 (not quite sure the version of MKL).

When I specifies the phase parameter inside the subroutine with either 11, 22, or 33, the executable file got stuck and stop running. If changed to 1, 2 and then 3 phase by phase, the result are not reliable unfortunately and the following was present when the msglvl goes to 1 :

 

 

*** Error in PARDISO  ( sequence_ido,parameters) error_num= 20
*** wrong control step parameter ido 1

=== PARDISO: solving a complex nonsymetric system ===


================

Times:
======
Time spent in additional calculations                            : 0.002354 s
Total time spent                                                 : 0.002354 s

Statistics:
===========
< Parallel Direct Factorization with number of processors: > 2
< Numerical Factorization with BLAS3 and O(n) synchronization >

< Linear system Ax = b >
             number of equations:           1278
             number of non-zeros in A:      13434
             number of non-zeros in A (): 0.822515

             number of right-hand sides:    1

< Factors L and U >
             number of columns for each panel: 128
             number of independent subgraphs:  0
< Preprocessing with state of the art partitioning metis>
             number of supernodes:                    0
             size of largest supernode:               0
             number of non-zeros in L:                0
             number of non-zeros in U:                0
             number of non-zeros in L+U:              0
*** Error in PARDISO  ( sequence_ido,parameters) error_num= 20
*** wrong control step parameter ido 2

=== PARDISO: solving a complex nonsymetric system ===


================

Times:
======
Time spent in additional calculations                            : 0.000108 s
Total time spent                                                 : 0.000108 s

Statistics:
===========
< Parallel Direct Factorization with number of processors: > 2
< Numerical Factorization with BLAS3 and O(n) synchronization >

< Linear system Ax = b >
             number of equations:           1278
             number of non-zeros in A:      13434
             number of non-zeros in A (): 0.822515

             number of right-hand sides:    1

< Factors L and U >
             number of columns for each panel: 128
             number of independent subgraphs:  0
< Preprocessing with state of the art partitioning metis>
             number of supernodes:                    0
             size of largest supernode:               0
             number of non-zeros in L:                0
             number of non-zeros in U:                0
             number of non-zeros in L+U:              0
*** Error in PARDISO  ( sequence_ido,parameters) error_num= 20
*** wrong control step parameter ido 3

=== PARDISO: solving a complex nonsymetric system ===


================

Times:
======
Time spent in additional calculations                            : 0.000102 s
Total time spent                                                 : 0.000102 s

Statistics:
===========
< Parallel Direct Factorization with number of processors: > 2
< Numerical Factorization with BLAS3 and O(n) synchronization >

< Linear system Ax = b >
             number of equations:           1278
             number of non-zeros in A:      13434
             number of non-zeros in A (): 0.822515

             number of right-hand sides:    1

< Factors L and U >
             number of columns for each panel: 128
             number of independent subgraphs:  0
< Preprocessing with state of the art partitioning metis>
             number of supernodes:                    0
             size of largest supernode:               0
             number of non-zeros in L:                0
             number of non-zeros in U:                0
             number of non-zeros in L+U:              0

 

 

I do not know what the reason is, the version of my MKL ?

 

Thanks in advance.

 

 

0 Kudos
16 Replies
Gennady_F_Intel
Moderator
810 Views

Have you  enabled matrix checker by iparm(28)==1?

0 Kudos
Alexander_K_Intel2
810 Views

Just a quick comment: not iparm(28) you need to set to 1 to turn on matrix checker but iparm(27)

Thanks,

Alex

0 Kudos
Customer__Intel2
Beginner
810 Views

Thank you Gennady Fedorov and Alexander Kalinkin first for the quick reply.

I called the subroutine pardisoinit to initialize all the default parameters before the 'pardiso', and the default value of iparm(28) is 0, should I change to 1? Considering that the high accuracy is expected.

 

Even setting iparm(27) to 1, I cannot observe the clear difference, the results are still not reliable.

 

The problem is I can only set the 'phase' parameter to single digit, not double digits like 13.

In addition, what can you speculate from my previous error log?

Thanks again.

Chunyuan

0 Kudos
Alexander_K_Intel2
810 Views

Hi,

As i understood you set ido to 1, 2 and 3 that is incorrect. Please set it to 11, 22 and 33 and turn on matrix checker. Could you provide screen output of pardiso working here?

Thanks,

Alex

0 Kudos
Customer__Intel2
Beginner
810 Views

Hi,

When I changed to 11, the executable file produced by Visual Studio stopped working and showed 'forrtl:severe (157): Program Exception - access violation', following the lines:

Image                 PC                 Routine                 Line       Source

mysolver.exe                            Unknown             Unknown   Unknown

Kernel32.dll                              Unknown             Unknown   Unknown

ntdll.dll                                     Unknown             Unknown   Unknown

ntdll.dll                                     Unknown             Unknown   Unknown

 

And nothing else left.

Thanks.

Chunuan

0 Kudos
mecej4
Honored Contributor III
810 Views

I don't think that you can expect progress unless you post example code that can be compiled and run to show the same problems as those that you reported. We do not know whether you are calling Pardiso from C or Fortran, what the arguments are, whether you are using zero-based or 1-based indexing, etc.

Have you consulted the example source code provided with MKL, pardiso_unsym_complex_f.f?

0 Kudos
Alexander_K_Intel2
810 Views

Hi,

Could you check size of your input arrays, like ia, ja, a and pt? Typically such kind of problem appeared when size of arrays is incorrect or you set in in pardiso incorrectly. 

Thanks,

Alex

0 Kudos
Customer__Intel2
Beginner
810 Views

Hi,

The size of the input arrays are restricted with the real size ( I set a,b,x with pointers), that seems not big issue.

And 'mecej4', thanks first for your suggestion, I am trying to extract my equation and code, to be clear: I am calling from Fortran with 1-based indexing.

I attach my partial codes in PartialCode.txt and my original data here.

 

Thanks.

Chunyuan

0 Kudos
Ying_H_Intel
Employee
810 Views

Hi Chunyuan, 

The main problem may be in your input parameter.  I check the a.txt, it  has 28747 non-zero elements. 

But in pardiso output, it seems the non-zero elements is 13434. Could you please check your input? 

number of equations:           1278

             number of non-zeros in A:      13434

I guess if you fix this, then call phase 11, 22, 33  and -1 , you will get them work normally. 

Best Regards,

Ying 

0 Kudos
Customer__Intel2
Beginner
810 Views

Hi Ying,

Thank you first for the information.

It seems that the input parameters: the size of a and ja are incorrect, but it is necessary to notice that the results are achieved when the phase is set to 1, 2 and 3, no result when setting to 11, 22 or 33. I re-checked my input parameters: the size of a and ja, both are 28747 from output.

I speculate if my Visual Studio setup was wrong, like the term 'Use Intel Math Kernel Library' to Sequential or Parallel. Considering the error present when set the phase to 1, 2 or 3, this sounds not big issue.

Cheers,

Chunyuan

0 Kudos
Customer__Intel2
Beginner
810 Views

Hi everyone,

Thank you very much for your help.

I found where the problem was and has been resolved: due to the discrepancy of different MKL library versions, I added an additional term 'dparm' in the end of calling PARDISO subroutine, luckily it works now.

Could someone show me how to check the version of MKL library? I installed Microsoft Visual Studio 2012 and Intel Parallel Studio XE 2013.

Thanks in advance.

 

Cheers,

Chunyuan

0 Kudos
mecej4
Honored Contributor III
810 Views

chunyuan wrote:

due to the discrepancy of different MKL library versions, I added an additional term 'dparm' in the end of calling PARDISO subroutine, luckily it works now.

Rather than between different MKL versions, the dparm argument is used in the Basel/Lugano version of Pardiso.

Could someone show me how to check the version of MKL library? I installed Microsoft Visual Studio 2012 and Intel Parallel Studio XE 2013.

There are two functions for this purpose, which are described in the Support Functions section of the MKL manual. For calling from Fortran, you can call mkl_get_version_string( buf ).

0 Kudos
Customer__Intel2
Beginner
810 Views

Thank you, mecej4.

0 Kudos
Gennady_F_Intel
Moderator
810 Views

as an additional alternative -- for each of Composer's components ( IPP, TBB, Compilers (c/C++ and Fortran) and MKL ) exist list of txt files, namely: 

csupport.txt

fsupport.txt  

ippsupport.txt  

mklsupport.txt  --- > This package contains:
        Intel(R) Math Kernel Library 11.1 Update 2 for Windows*

 

bbsupport.txt

You can see these files into <composer_root_direstory>\Documentation\" 

 

 

0 Kudos
Ying_H_Intel
Employee
810 Views

Hi Chunyuan, 

MKL pardiso doesn't support the phase 1, 2, 3  as input.

And MKL Pardiso doesn't use the dparm augments ( as mej mentioned) .  But you mentioned, after add the parameter, the problem is solved. is there some misunderstanding here, could you please clarify if possible? 

Here is the article about  API differences between Intel® MKL PARDISO and University of Basel PARDISO* 4.0.0

https://software.intel.com/en-us/articles/summary-of-api-differences-between-intel-mkl-pardiso-and-university-of-basel-pardiso-400

Best Regards,

Ying 

One more piece of information regarding MKL version info :). 

https://software.intel.com/en-us/articles/which-version-of-the-intel-ipp-intel-mkl-and-intel-tbb-libraries-are-included-in-the-intel

Intel Composer XE Edition Intel C++ Compiler XE Version Intel IPP Version Intel MKL Version Intel TBB Version
2013 SP1 update 3 (22 Apr 2014) 14.0.3 8.1.1  11.1.3 4.2 update 4
2013 SP1 update 2 (30 Jan 2014) 14.0.2 8.1  11.1.2 4.2 update 3
2013 SP1 update 1 (24 Oct 2013) 14.0.1 8.0.1 (W.139,L.106,M.103) 11.1.1 4.2 update 1
 2013 SP1 14.0.0 8.0.1 11.1 4.2
 2013 update 5 13.1.3 7.1.1 11.0.5 4.1.4
 2013 update 4 13.1.2 7.1.1 11.0.4 4.1.3
 2013 update 3 (not recommended) 13.1.1 7.1.1 11.0.3 4.1.3
 2013 update 2 13.1.0 7.1.1 11.0.2 4.1.2
 2013 update 1 13.0.1 7.1.1 11.0.1 4.1.1
 2013 13.0.0 7.1 11.0 4.1

Best Regards,

Ying 

0 Kudos
Customer__Intel2
Beginner
810 Views

I first express my gratitude to Gennady Fedorov and Ying.

After re-compiling my codes, I found the confusing point: when initializing the problem by the subroutine 'pardisoinit' with the arguments pt, mtype, solver, iparm , dparm, error ( Basel version as what I tried before), and computing my problem by pardiso ( arguments identical with the Basel version with dparm), the matrix equations were solved properly.

Now, I change both subroutines as the Intel MKL manual suggested, the solver still works well.

The only situation that the solver doesn't work is to call one subroutine with regards to its arguments requirements in version A, the other with B.

Cheers,

Chunyuan

0 Kudos
Reply