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

Error -2 when running PARDISO with multi threads

Gisiu_T_
Beginner
610 Views

Dear all,

I am trying to solve a sparse symmetric indefinite real matrix using PARDISO. The matrix is of size n=55,650,566 with 164,833,721 nonzero entries. Everything is good when the number of enable threads is equal or smaller than 17. But when I set the number of threads to be 18, error code -2 generated. And the error message shows as follows:

*** Error in PARDISO  (     insufficient_memory) error_num= 2
*** Error in PARDISO memory allocation: BEFORE_REORDERING, allocation of -8299199 bytes failed
total memory wanted here: -6125334 kbyte

Error also happens when the number of threads is bigger than 18. The machine I use has 1031GB RAM and 262GB swap space, so the insufficient memory error seems unreasonable. And the negative number of bytes in error messages is also weird. I wonder why PARDISO goes wrong under such conditions.

More information about my environment: The MKL version is 11.0.2. CPU: Intel Xeon 120 X 1200MHz. Memory: 1031GB RAM and 262GB swap. OS: RedHat Enterprise Linux 7.1

Thanks

 

 

0 Kudos
6 Replies
Gisiu_T_
Beginner
610 Views

Hi,

I updated my MKL to version 11.2.3. But the error message still occurs and is very similar to the original error message

 

Intel(R) Math Kernel Library Version 11.2.3 Product Build 20150409 for Intel(R) 64 architecture applications
*** Error in PARDISO  (     insufficient_memory) error_num= 2
*** Error in PARDISO memory allocation: BEFORE_REORDERING, allocation of -8299199 bytes failed
total memory wanted here: -6125208 kbyte

 

Regards,

Gisiu

0 Kudos
Alexander_K_Intel2
610 Views

Hi,

Which mkl libs you link in your pardiso sample? Could you provide linkline?

Thanks,

Alex

0 Kudos
mecej4
Honored Contributor III
610 Views

And the negative number of bytes in error messages is also weird. I wonder why PARDISO goes wrong under such conditions.
These are signs of INTEGER*4 having been used when INTEGER*8 was needed because of the problem size being large. This error could have happened in your code because you used INTEGER*4, or in Pardiso routines because you called the LP64 library instead of the ILP64 library, as Alexander hinted.

0 Kudos
Gisiu_T_
Beginner
610 Views

Hi Alexander and mecej4,

Thanks for your help. I follow the instructions in this page: https://software.intel.com/en-us/articles/using-intel-mkl-in-your-python-programs ; to call "libmkl_rt.so" in my Python program. I don't know whether the problem is caused by this method.

Thanks

0 Kudos
Ying_H_Intel
Employee
610 Views

Hi Gisiu, 

Beside libmkl_rt.so, do you have other environment set? 

Generally, link mkl_rt.so , is Intel LP64 interface and Intel OpenMP threading RTL. 

So besides libmkl_rt.so you may need to set the interface layer at run time, use the mkl_set_interface_layerfunction or the

MKL_INTERFACE_LAYERenvironment variable.

for example, 

MKL_INTERFACE_LAYER=MKL_INTERFACE_ILP64. 

Please let us know if it work. 

Regards,

Ying 

 

 

0 Kudos
Gisiu_T_
Beginner
610 Views

Hi Ying,

Thanks for your reply. I call mkl.mkl_set_interface_layer(byref(c_types(1))) in my Python program and error is still invoked when the number of the thread set higher than 17. But the error message is different from before:

*** Error in PARDISO  (     insufficient_memory) error_num= 0
PARDISO Internationalization error. Message 0 is unknown.
total memory wanted here: 11 kbyte
ERROR during symbolic factorization: -2

By the way, PARDISO runs well if I call it in C program. And also, given smaller matrix (n about 400,000 and number of nonzero 1,000,000), my Python script can run without error with any number of threads.

Regards,

Gisiu

0 Kudos
Reply