Questions with pardiso

Questions with pardiso

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.

 

 

17 post / 0 nuovi
Ultimo contenuto
Per informazioni complete sulle ottimizzazioni del compilatore, consultare l'Avviso sull'ottimizzazione

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

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

Thanks,

Alex

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

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

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

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?

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

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

Allegati: 

AllegatoDimensione
Download PartialCode.txt3.49 KB
Download ia.txt28.31 KB
Download ja.txt636.33 KB
Download a.txt1.38 MB

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 

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

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

Citation :

chunyuan a écrit :

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.

Citation :

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 ).

Thank you, mecej4.

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\" 

 

 

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-bet...

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 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 

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

Lascia un commento

Eseguire l'accesso per aggiungere un commento. Non siete membri? Iscriviti oggi