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

Pardiso fails in finding (selective) solution after upgrade from MKL 2017 to MKL 2019

fanselm
New Contributor I
2,279 Views

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

Labels (1)
0 Kudos
1 Solution
Gennady_F_Intel
Moderator
2,178 Views

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




View solution in original post

0 Kudos
8 Replies
Gennady_F_Intel
Moderator
2,255 Views

Filip, thanks for the report. We will check this case and get back soon.


0 Kudos
fanselm
New Contributor I
2,213 Views

Any news on this question? I can add that the issue is also reproducible in oneAPI 2021.

0 Kudos
Gennady_F_Intel
Moderator
2,208 Views

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.


0 Kudos
fanselm
New Contributor I
2,200 Views

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.

0 Kudos
Gennady_F_Intel
Moderator
2,179 Views

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




0 Kudos
fanselm
New Contributor I
2,131 Views

Hi Gennady,

Yeah, we will use this as a workaround for now. Thanks for spending time to investigate this.

 

- Filip

0 Kudos
Gennady_F_Intel
Moderator
2,123 Views

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




0 Kudos
Gennady_F_Intel
Moderator
383 Views

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

0 Kudos
Reply