Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
5 Views

MKL PARDISO Manual Question

I am comfused by following instruction at MKL reference manual 630813-027US p2179:

"Note that if iparm(60) is equal to 1 or 2, and the total peak
memory needed for strong local arrays is less than
MKL_PARDISO_OOC_MAX_CORE_SIZE, the program stops
with error -9. In this case, increase of
MKL_PARDISO_OOC_MAX_CORE_SIZE is recommended."
0 Kudos
9 Replies
Highlighted
5 Views

Hi,

Let me clarify this instruction: PARDISO has two modes of execution: In-Core, when all LU factor are fit in RAM, and Out-of-core (OOC) otherwise. In the last case most of LU factors are stored on hard disk. OOC mode (iparm(60) = 1 or 2) requires information about memory which PARDISO can utilize - it determines by MKL_PARDISO_OOC_MAX_CORE_SIZE parameter; and PARDISO stops with error= -9 in the case when the specified amount memory is not enough for solving the task. In this case the amount of memory should be increased to solve it.

Regards,

Sergey

0 Kudos
Highlighted
5 Views

You indicate if
total peak memory > MKL_PARDISO_OOC_MAX_CORE_SIZE, PARDISO stops with error=-9. That makes perfect sense.
However, the manual seems indicate
total peak memory < MKL_PARDISO_OOC_MAX_CORE_SIZE, PARDISO stops with error=-9.
That's where my confusion is.
0 Kudos
Highlighted
5 Views

Two more questions:
1. in-core vs OOC: it seems the most flexbile setting is iparm(60)=1 (letting PARDISO to decide). My question is: is iparm(60)=1 as efficient as explicit setting? For example, in article Tips using PARDISO(http://software.intel.com/en-us/articles/pardiso-tips/) , I found following:
"Performance recommendations

To achieve the best performance, we do not recommend the use of the out-of-core (OOC) PARDISO for small matrices. We recommend using the in-core PARDISO for all cases where the memory required for storing PARDISO factors exceeds the RAM by less than 30%. The size of the factors in kbytes can be obtained with the help of iparm(17) after phase 11 (see Intel MKL reference manual)."
This seems indicate I should use the ohase 11 result to decide in-core or OOC and set iparm(60)=0 or iparm(60)=2 myself.

2. OOC not threading: I found following in article How to use OOC PARDISO (http://software.intel.com/en-us/articles/how-to-use-ooc-pardiso)
"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."
Does this mean OOC is running in sequential mode (instead of parallel shared memory mode)?

0 Kudos
Highlighted
Moderator
5 Views

Thank you for pointing out the mistake. We will correct that in the future updates.
--Gennady
0 Kudos
Highlighted
5 Views

Can someone answer above two questions about OOC for me? Thanks.
0 Kudos
Highlighted
5 Views

Hi,

Answer on first question: both variants are possible. The sentence from manual that you mention means that sometimes in-core version of PARDISO could use HDD in swop and provide better performance than OOC PARDISO. As about second question: it does depend from version of MKL you used. If you use 10.2 update 2 of latter version then OOC PARDISO version is parallelized

With best regards,

Alexander Kalinkin

0 Kudos
Highlighted
Moderator
5 Views

xian-zhong, see the documentation of the latest versions ( 10.2 update7 and 10.3.1). This problem has been fixed there. As an example see the snip from this doc ( 10.3. Update1 - bundled with Composer XE 2011):

Ifiparm(60)is equal to 1 or 2, and the total peak memory needed for strong local arrays is more thanMKL_PARDISO_OOC_MAX_CORE_SIZE, the program stops with error -9. In this case, increaseMKL_PARDISO_OOC_MAX_CORE_SIZE.
0 Kudos
Highlighted
5 Views

Typo: strong should be storing, I believe.
0 Kudos
Highlighted
Moderator
5 Views

I agree with this observation. Will be fixed into the next update.
0 Kudos