- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Have you enabled matrix checker by iparm(28)==1?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Just a quick comment: not iparm(28) you need to set to 1 to turn on matrix checker but iparm(27)
Thanks,
Alex
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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 ).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you, mecej4.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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\"
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Best Regards,
Ying
One more piece of information regarding MKL version info :).
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
![](/skins/images/7FC17B7B85029576C25F1E43CE255B51/responsive_peak/images/icon_anonymous_message.png)
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page