Recently we received multiple inputs from our customers regarding 32bit Pardiso Out-of-Core (OOC) solver crashes when solving a big task.
These failures are related to the fact that the memory needed for numerical factorization stage, one of Pardiso stages, exceeded 2Gb. 2 Gb roughly corresponds to the memory allocated at the factorization stage for 250*10^6 double nonzero elements of L factors.
The latest version of Intel® MKL 10.2 Update 2 introduces the advanced option allowing solving such tasks for the real symmetric positive definite matrices ( mtype == 2 ).
The solution for the other types of matrices will be implemented in the next versions.
Below example (Laplace3D.cpp) shows how such problem can be solved on ia32 system, It uses OOC "PARDISO" routine for a symmetric positive linear system with one right hand side.
Compile and link the example with MKL 10.2 Update 2 and run with the following input arguments:
test.exe n1 n2 n3
n1, n2 and n3 are the dimensions of Laplace3D matrices.
The number of solved equations is be calculated as n1 * n2 * n3
with the command line
test.exe 140 140 100
The number of equations is equal 1.96*10^6 and so it requires 1.96 * 10 ^ 9 nonzero elements on the factorization stage. Such task can be solved on the system with RAM = 2 Gb and the available physical memory 1.2 Gb (at the moment when the task starts ).
Important to mention that MKL_PARDISO_OOC_MAX_CORE_SIZE environment variable was set 1000 Mb.
Let us note that 32bit Pardiso OOC solver cannot solves problems with more than 2 000*10^6 double nonzero elements of L factors, because of 32bit counters inside 32-bit PARDISO.
Pardiso will returns something like:
*** Error in PARDISO (32-bit overflow problem.) error_num= -182
*** error PARDISO: reordering, symb. Factorization