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

Having Problems using PARDISO OOC

Alemdar__Bulent
Beginner
407 Views

Hi

I am having problems in PARDISO out of core solver. In my code, I set these variables (using C convention):
iparam[2] = 1;
iparam[59] = 2;

I use VS2005 (Windows XP, 32-bit, P4, 2GB) and I call PARDISO from inside a COM DLL. The size of the matrix I try to solve = ~340,000 with 7.5 million nonzeros.

First I define "MKL_PARDISO_OOC_MAX_CORE_SIZE = 2000" in "pardiso_ooc.cfg" and then, I am getting "-2" error code (insufficient memory). And If it is "MKL_PARDISO_OOC_MAX_CORE_SIZE = 250", I am getting -9 (insufficient memory for OOC). I tried a few other numbers, but i still get either -2 or -9.

Interestingly, if I create a simple Windows-console application and try to solve my matrix, It works successfully with both in-core and OOC PARDISO.

Any help greatly appreciated
regards
bulent



0 Kudos
5 Replies
AndrewC
New Contributor III
407 Views
Make sure you are using the latest Update 4 for MKL 10 . I found a problem with OOC and PARDISO in Update 3 - it was targeted to be fixed in Update 4.
0 Kudos
Alemdar__Bulent
Beginner
407 Views

I just checked my version: 10.0.4.023

b.

0 Kudos
Gennady_F_Intel
Moderator
407 Views

Hi Bulent,

I think that the cause of the problem you met is limitation for allocation memory from DLL ( I guess that this limit something around 2 GB ). Some people compains about 1 Gb only.

Look at your case:

The Input data: Size of the matrix ~ 340.000, nonzero(A) ~ 7.500.000

Therefore after reordering we can expect the number of nonzeros LU factors may be for example > 500.000.000. So, for allocation this LU factors requires more that 2 Gb.

++++++++++++++++++++++++++++++++++++++++

As an example: I have tried to reproduce the task

Input matrix size = 350 000

Mtype == 2 (real and symmetric positive definite matrix)

and please look at the snip of statistics report:

< Linear system Ax = b>

#equations: 350000

#non-zeros in A: 1384500

non-zeros in A (): 0.001130

#right-hand sides: 1

< Factors L and U >

#columns for each panel: 80

& nbsp; #independent subgraphs: 0

< Preprocessing with state of the art partitioning metis>

#supernodes: 230149

size of largest supernode: 5062

number of nonzeros in L 152892710

number of nonzeros in U 1

number of nonzeros in L+U 152892711

++++++++++++++++++++++++++++++++++++++++++

Please pay attention for this matrix (only 1.4 million non-zeroes) we have nonzeros for LU ~ 150 million, therefore for allocation this array require ~ 8*150 million > 1.2 Gb

This is just suggestion. You can easy to check this suggestion to reduce the task size.

Please let me know if any further question.

Regards,

--Gennady

0 Kudos
Alemdar__Bulent
Beginner
407 Views

Gennady

Thanks for your comments. I run in-core version of PARDISO in my little test program (calling PARDISO routines from a windows-console application). Here is the results I have:

< Linear system Ax = b>
#equations: 324885
#non-zeros in A: 7440848
non-zeros in A (%): 0.007050
#right-hand sides: 1

< Factors L and U >
#columns for each panel: 80
#independent subgraphs: 0
< Preprocessing with state of the art partitioning metis>
#supernodes: 55249
size of largest supernode: 2479
number of nonzeros in L 63468206
number of nonzeros in U 1
number of nonzeros in L+U 63468207

For factorization part, apparently, the programs needs 63468207 * 8 /1E6 = 507.75 MB memory.

I see your comments regarding high memory requirements and I totally agree with you.. And, I understand that when I call PARDISO from a DLL, it may be the reason that either OS or DLL does not allow PARDISO use ~500 MB from the heap memory.

On the other had, what is confusing me is that I run into the same limitation when I use out-of-core version of PARDISO called from my DLL. (for OOC version, I believe this 500MB is stored in files , and then the solver partially reads some of these files into memory during factorization).

Regards

Bulent

0 Kudos
mma1
Beginner
407 Views

Hi

I am having problems in PARDISO out of core solver. In my code, I set these variables (using C convention):
iparam[2] = 1;
iparam[59] = 2;

I use VS2005 (Windows XP, 32-bit, P4, 2GB) and I call PARDISO from inside a COM DLL. The size of the matrix I try to solve = ~340,000 with 7.5 million nonzeros.

First I define "MKL_PARDISO_OOC_MAX_CORE_SIZE = 2000" in "pardiso_ooc.cfg" and then, I am getting "-2" error code (insufficient memory). And If it is "MKL_PARDISO_OOC_MAX_CORE_SIZE = 250", I am getting -9 (insufficient memory for OOC). I tried a few other numbers, but i still get either -2 or -9.

Interestingly, if I create a simple Windows-console application and try to solve my matrix, It works successfully with both in-core and OOC PARDISO.

Any help greatly appreciated
regards
bulent



Hi, Bulent,

You are not alone. I reported the exact same problem to Intel premier support 4 months ago, with a complete sample project, a dataset (ftp://ftp.orca3d.com/pub/Intel/PardisoAlone.zip), and the computer description,yet still had no answer up to today. Accidentally, we run the same executable in a single processor machine last week, and it runthrough without any problem. Please join me to ask MKL developteam to fix this dual-core related PARDISO-OOC bug ASAP.

Regards

Ming

0 Kudos
Reply