- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
We are currently upgrading from MKL 2017 to MKL 2019. After the upgrade some of our unit tests fail.
What they do is to solve the system Ax = b, where A and X are sparse with known sparsity patterns. To solve this system we use Pardiso and choose to only calculate certain components of X as we know the others are assumed to be zero. We use the iparm[30] = 3 setting to do this and specify the components of x to solve for with the perm array. However after the upgrade this appears not to work anymore - the output is simply equal to the right hand side. If we change to iparm[30] = 0 it works, but then you don't get the speed benefit of solving for certain components only. Can you please help me see if we are somehow invoking Pardiso wrong or whether there is in fact a bug somewhere, in our code or in Pardiso?
I searched the forum and I could not find other reports, though this post does sound similar in that they use some of the same features and also have problems going from 2017 to later versions.
I have made a minimally reproducible example in C++. I source the mklvars.sh from the 2017.2.174/2019.5.281 distribution and compile with GCC 9.2.0 on Ubuntu 16.04. I have provided both source code, Makefile and the output I get with iparm[30] = 0 or 3 with both MKL 2017 (working) and MKL 2019 (not working - weird/no output).
Hope to hear from you, thanks.
Sincerely,
Filip Rasmussen
- Tags:
- pardiso
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Filip,
please try to disable the two-level factorization algorithm by setting
iparm[23] == 0 and check if the problem will exist on your end. I see no problem on my side with the current version of oneMKL 2021.3:
Enter iparm[30] value MKL v. 2021.0.3
Processor optimization: Intel(R) Advanced Vector Extensions 2 (Intel(R) AVX2) enabled processors
a = [3, 7, 6, 3, 8, 5, 9, 4, 7, 8, 2, 9, 3, 9, 9, 9, 9, ]
ia = [0, 3, 6, 10, 14, 17, ]
ja = [0, 1, 3, 0, 1, 4, 0, 2, 3, 4, 0, 1, 3, 4, 0, 3, 4, ]
Calling Pardiso with iparm[30]=1
...Pardiso, phase ==12 is passed...
...Pardiso, phase == 33 is passed...
...Pardiso, phase == -1 is passed...
Pardiso calculation done
x =
0.471053,
0.0552632,
0.557237,
-0.3,
-0.171053,
...Test passed...
it might be the work-around the problem which we are planning to fix into one of the future versions.
-Gennady
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Filip, thanks for the report. We will check this case and get back soon.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Any news on this question? I can add that the issue is also reproducible in oneAPI 2021.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
yes, we were able to reproduce the problem with the latest versions of mkl as well. The issue is escalated and we will keep this thread updated.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks for looking into this. We have disabled the functionality that depends on this for now as it wasn't super critical anyway. In worst case we can properly replace the implementation with one of the other million sparse linear solvers out there, so it's not super urgent anymore - for us at least.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Filip,
please try to disable the two-level factorization algorithm by setting
iparm[23] == 0 and check if the problem will exist on your end. I see no problem on my side with the current version of oneMKL 2021.3:
Enter iparm[30] value MKL v. 2021.0.3
Processor optimization: Intel(R) Advanced Vector Extensions 2 (Intel(R) AVX2) enabled processors
a = [3, 7, 6, 3, 8, 5, 9, 4, 7, 8, 2, 9, 3, 9, 9, 9, 9, ]
ia = [0, 3, 6, 10, 14, 17, ]
ja = [0, 1, 3, 0, 1, 4, 0, 2, 3, 4, 0, 1, 3, 4, 0, 3, 4, ]
Calling Pardiso with iparm[30]=1
...Pardiso, phase ==12 is passed...
...Pardiso, phase == 33 is passed...
...Pardiso, phase == -1 is passed...
Pardiso calculation done
x =
0.471053,
0.0552632,
0.557237,
-0.3,
-0.171053,
...Test passed...
it might be the work-around the problem which we are planning to fix into one of the future versions.
-Gennady
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Gennady,
Yeah, we will use this as a workaround for now. Thanks for spending time to investigate this.
- Filip
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Filip,
The ticket is closing. We will update this thread when the fix of the issue would available in the official version of MKL.
Gennady
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear Filip,
the problem has been fixed into the last version of oneMKL 2024.2.
Please take a look at the outputs with iparm[30]==0 and 1 below:
MKL v. 2024.0.2
Processor optimization: Intel(R) Advanced Vector Extensions 512 (Intel(R) AVX-512) enabled processors
a = [3, 7, 6, 3, 8, 5, 9, 4, 7, 8, 2, 9, 3, 9, 9, 9, 9, ]
ia = [0, 3, 6, 10, 14, 17, ]
ja = [0, 1, 3, 0, 1, 4, 0, 2, 3, 4, 0, 1, 3, 4, 0, 3, 4, ]
>> Calling Pardiso with iparm[30]=0
...Pardiso, phase ==12 is passed...
...Pardiso, phase == 33 is passed...
...Pardiso, phase == -1 is passed...
Pardiso calculation done
x =
0.471053,
0.0552632,
0.557237,
-0.3,
-0.171053,
...Test passed...
>> Calling Pardiso with iparm[30]=1
...Pardiso, phase ==12 is passed...
...Pardiso, phase == 33 is passed...
...Pardiso, phase == -1 is passed...
Pardiso calculation done
x =
0.471053,
0.0552632,
0.557237,
-0.3,
-0.171053,
...Test passed...
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page