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

MKL Pardiso: (iparm(3) > 1 .AND. iparm(60) = 1) equals "Mission Impossible"

brianlamm
Beginner
444 Views
This is borderline silly. The MKL user manual reads:

If iparm(60) is set to 0, then the in-core PARDISO is used.
If iparm(60) is set to 2 - the OOC PARDISO is used. If
iparm(60) is set to 1 - the in-core PARDISO is used if the
total memory (in MBytes) needed for storing the matrix
factors is less than the value of the environment variable
MKL_PARDISO_OOC_MAX_CORE_SIZE

And, there's a warning right above that in MKL user manual reading:

WARNING. The current OOC version does not use
threading, thus both the parameter iparm(3) and
the variable MKL_NUM_THREADS must be set to 1
when iparm(60) is equal to 1 or 2.

Now, I must be really obtuse, or the above is really hard to "swallow".

If one sets iparm(60) =1, then PERHAPS IN CORE pardiso will be used, but the threading CANNOT be used in that (in core) case! That is a ridiculous constraint. MKL NEEDS to put more thought into this potential conundrum! MKL needs to provide a way to let the developer determine at run time WHICH pardiso will be used when iparm(60) = 1 is set, so that he/she may then run time (programmatically) decide WHAT TO SET iparm(3) EQUAL to.

So, if one sets iparm(3) = mkl_get_max_threads(), which COULD be greater than ONE, then iparm(60) will HAVE TO BE SET TO 0, always in core, thus DEFEATING THE WHOLE PURPOSE OF PUTTING OCC CAPABILITY IN IN THE FIRST PLACE.

OR, if the programmer wants to take advantage of this new OCC capability WITH the capability of having MKL decide whether to run pardiso OCC or not, then ALL THREADING ADVANTAGES ARE LOST.

So, MKL team, are you planning on letting us know how to, or give us the capability to use the "decision-making" capability to run in-core or OOC (iparm(60)=1) AND use multi-threading IF MKL pardiso "decides" it can run IN core??? By the MKL user manual, that is currently IMPOSSIBLE to do while ensuring application which uses MKL pardiso won't crash or give garbage results.

To repeat, it is currently IMPOSSIBLE to get a RELIABLE application built using MKL pardiso if one sets iparm(3) = to anything other than "1" IF iparm(60) is set = 1.

Brian
0 Kudos
1 Reply
mma1
Beginner
444 Views

Hi, Brian,

I run into the same problem. Does Pardiso-OOC really work? If I set iparm(3)=1 & iparm(60)=1, the code crashes, if I set iparm(60)=2, then I still get -9 error. Did you have any success with Pardiso-OOC?

Thanks

Ming

0 Kudos
Reply