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

Segmentation fault in PARDISO phase 33 when changing parameters in iparm

Kempke__Nils-Christi
1,433 Views

Hello,

we are currently integrating PARDISO into our software and stumbled upon some (from our point of view) weird behaviour.

First the setting:

Given a sparse matrix of type -2 we start with phase 12, so reordering and symbolic factorization. After that we wanted to use phase 33 with a sparse right hand side and thus set iparm[30] = 1.

In the documentation it says that for using iparm[23] = 1 (what we wanted to do), we should

Disable iparm[10] (scaling) and iparm[12] = 1 (matching) when using the two-level factorization algorithm. Otherwise Intel MKL PARDISO uses the classic factorization algorithm.

First of all, we are not quite sure what that is supposed to mean: Does it say set iparm[10] and iparm[12] both to zero? Or does it say set iparm[10] = 0 and iparm[12] = 1?
Ok, so, nevertheless, we set both to one and in addition set iparm[23] = 1, because we didn't quite read the hint at that time and anyway, we expected that this would lead to a behaviour similar to iparm[23] = 0.
The reason for setting iparm[10] and iparm[12] in the first place was that, indeed, our matrices come from a interior point method.

Now the weird part.
During phase 12 we did not set iparm[30] (since pardisoinit did not and we did not hand over a right hand side at that point - also, the documentation says iparm[30]

controls the solve step of Intel MKL PARDISO.

For phase 33 we then set iparm[30] = 1 and got a segfault back from pardiso.
Now, we did find two ways to get rid of the segfault neither of which seem to make any sense:
a) when setting iparm[30] = 1 for phase 12 and 33 the segfault disappears
b) setting iparm[23] = 0 or iparm[23] = 10 during solution phase lets the segfault disappear too

Frankly we are not quite sure what is going on here, I assume we misunderstood something.

Another thing we saw happening: during phase 12 PARDISO sets paramter iparm[33] = -1. Iparm[33] is described as an input parameter and thus should not be set by PARDISO? Or does this indicate some kind of error?

 

We hope you can help us.

With best regards,

Nils

 

PS:
I attached the example we were using, it is a modified version of the pardiso_sym_c.c example. Compiler command is on the top of the file in some comment. You can also find the complete setting of iparm we were using during phase 12 and the on we were using during phase 33 (iparm2).

0 Kudos
2 Replies
Gennady_F_Intel
Moderator
1,433 Views

Hello Nils. This looks like the issue with the partial solving mode. we will fix the problem and update this thread as soon as the problem will be fixed.

0 Kudos
Alexander_K_Intel2
1,433 Views

Hi Nils,

First of all thank you for using Intel MKL Pardiso. And sorry for not clear explanation of iparm array in documantation.

About 2-level factorization, to turn it on you need to set iparm[10]=0, iparm[12]=0, iparm[23]=1. And another main point - to use partial solving functionality you need to set iparm[30] to 1 and correspond perm before reordering step (phase 11). That was done because pardiso use specefic reordering algorithm in case of partial solving. In case of correct parameters your exampel works correctly

Thanks,

Alex 

0 Kudos
Reply