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

Nondeterminism in Pardiso

Noel_B_
Novice
580 Views
Hi,
We use the Intel MKL Pardiso solver to solve a small (couple hundred row) sparse (4%) system. Running our test case two consecutive times using the Pardiso solver produces very different results. In fact, there seems to be inherent non-determinism in the Pardiso solver.
Now for the standard caveats, our code is memory clean, both purify and valgrind are content. Replacing Pardiso with a standard biconjugate gradient solver and running the same test case on the same hardware produces identically repeatable results. We see this hysteresis on Windows, Mac and Linux in both debug and -O2. The code is serial, we don't enable OpenMP nor do we use the parallel Pardiso solver.
Has anyone else noticed this behavior or is this a known potential problem, any ideas? We haven't yet tried to produce a small test case demonstrating this problem, thought we'd ask first.
-- Noel Belcourt
S896822:~ kbelco$ icpc -V
Intel C++ Intel 64 Compiler Professional for applications running on Intel 64, Version 11.1 Build 20100806 Package ID: m_cproc_p_11.1.089
0 Kudos
5 Replies
Gennady_F_Intel
Moderator
580 Views
Might beyour matrices areill-conditioned or close to them. Did you estimate the conditin numbers of your input matrixes?
--Gennay
0 Kudos
barragan_villanueva_
Valued Contributor I
580 Views
Please look at similar thread
0 Kudos
basel
Beginner
580 Views
Hi Noel,

An answer to your question might be that even in case of iparam(2)=1 (#cores) you must use single threaded BLAS.

As an alternative you could also use the new version PARDISO 4.0.0 (www.pardiso-project.org). This version will always compute a bit-by-bit identical solution even on multicores e.g. using eight cores for the parallel factorization and the parallel solution.

Regards,
Olaf Schenk
0 Kudos
Noel_B_
Novice
579 Views
I love answering my own question.
Our matrix is not ill-conditioned. We did find the source of the non-determinism. We were passing a phase=0 in our last call to pardiso to release internal memory. Phase=0 releases memory for L and U. Passing phase=-1 fixed our problem. Phase=-1 releases all internal memory for all matrices. Changing phase from zero to negative one eliminated the nondeterminism in the solver.
I'd like to request that the developers look at this issue as we nearly gave up on Pardiso entirely due to the inability to reproduce the exact same answer given the exact same inputs. Perhaps some additional (re) initialization can be added with phase=0 to ensure both phases (0 and -1) produce the exact same answer.
Thanks for your responses.
-- Noel Belcourt
0 Kudos
Noel_B_
Novice
580 Views
As an alternative you could also use the new version PARDISO 4.0.0 (www.pardiso-project.org). This version will always compute a bit-by-bit identical solution even on multicores e.g. using eight cores for the parallel factorization and the parallel solution.

In fact, we will try this out as eliminating sources of non-determinism in parallel are extremely important to us, e.g. MPI and OpenMP reductions in rank order and so forth.
Look forward to trying your solver.
-- Noel Belcourt
0 Kudos
Reply