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

oneMKL PARDISO crashes when using analisys phase separately

Tatiana_
Beginner
1,007 Views

Hello!

We are trying to solve a set of problems A*x = b with different but structurally identical symmetric positive definite matrices A and different vectors b. To accelerate the solution we would like to make symbolic analisys (phase 11) separately.

So the routine is the following
1) initialisation
2) phase 11 
3) iteration one (phase 23)

4) update matrix A
5) iteration two (phase 23)
etc.

Now, we are faced with the problem, that if when matrix A changes its location in memory between iterations (delete old matrix, reallocate memory, create new matrix, provide correct pointers to pardiso), the solution crashes with "Exception thrown at 0x00007FFFE59FF4C3 (mkl_core.2.dll) in XXXX: Access violation reading location 0x000000006ea6a410."
If we change only the values, remaining the location of matrix unchanged, the solution continues correctly. 

The problem occurs with IntelMKL-2022.2.0. Former with much older version of MKL (unfotunately I can't say which one) we didn't have this issue.

Coud you please give me advice how to avoid this behaviour, if possible?

Thank you

0 Kudos
6 Replies
VarshaS_Intel
Moderator
970 Views

Hi Tatiana,

 

Thanks for posting in Intel Communities.

 

Could you please try running your code with the latest Intel MKL(2023.0.0) and let us know if you are still facing any issues?

If the issue persists, please let us know the OS details, and Visual Studio project properties(if Windows OS was used).
In addition, Could you please get back to us with the sample reproducer and the steps to reproduce (if any) it helps us reproduce the issue on our side and assist you further?

 

Thanks & Regards,
Varsha

 

0 Kudos
mecej4
Honored Contributor III
944 Views

Tatiana, there is no support for what you are attempting to do. If you look again at the documentation, you will see that the matrix descriptor arrays, in particular the locations of the nonzero entries, should be preserved between calls to Pardiso. Changing the matrix, or moving the matrix, as you want to do, invalidates all the memory pointers set up internally in Pardiso in the analysis phase. In your Step 4, you are only allowed to change the values of the matrix elements, not the size and location of the matrix or the pattern of the nonzero entries.

My suggestion is to rethink how the computation is being arranged. Is it really necessary to move the matrix between calls?

0 Kudos
Tatiana_
Beginner
938 Views

Thank you.

We´ve already done it without reallocation between calls.
I'm just wondering that it has worked in older versions

0 Kudos
mecej4
Honored Contributor III
921 Views

If you can provide a test case (preferably with a short but complete program) where it worked with reallocation between calls, and name the older compiler and versions, it would help; I am interested in trying to understand why it worked!

0 Kudos
VarshaS_Intel
Moderator
860 Views

Hi,


We have not heard back from you. Could you please provide us with an update on your issue?


Thanks & Regards,

Varsha


0 Kudos
VarshaS_Intel
Moderator
824 Views

Hi,


We have not heard back from you. This thread will no longer be monitored by Intel. If you need additional information, please start a new thread.


Thanks & Regards,

Varsha


0 Kudos
Reply