The sparse PARDISO solver doesn't seem to be fully functional yet. It sometimes hangs as shown in the attached screen shot or crashes with other input matrices. My machine is 2.4GHz dual core running 64-bit Ubuntu and I'm using Intel MKL 10.1.
I have attached makefile and c files for Linux compilation (pardiso.tar.gz). To reproduce the problem, run the executable with the matrix market (mtx) file at the following URL.
http://www.cise.ufl.edu/research/sparse/matrices/HB/orsirr_2.html
$ tar -xvzf pardiso.tar.gz
$ cd pardiso
$ make
$ ./pardiso ~/Desktop/orsirr_2.mtx
I also found that with the following matrix market file Pardiso crashes on 64-bit Windows.
http://www.cise.ufl.edu/research/sparse/matrices/Sandia/fpga_dcop_04.html
Is this a known problem? Is there any workaround? Thank you for your time.
Jaewon
Dear Jaemon,
It seems to me this is the known problem. MKL Pardiso depends on gnu libc and the problem appears on small general matrices (matrix type is 11) in parallel mode (MKL_NUM_THREADS > 1) and only when libc version is 2.5 or newer.
Could you please check your libc version typing
> /lib64/libc.so.6
GNU C Library stable release version 2.9 (20081117), by Roland McGrath et al
...
and inform me the version of libc installed on your Ubuntu?
There is a couple of simple workarounds for this particular problem. The first one is to set MKL_NUM_THREADS to one. Since typically the problem appears on very small matrices, the usage of parallelism doesn't give essential performance advantages. I'd like to notice that in MKL 10.1 iparm[2] is ignored and the parallel execution of MKL PARDISO is controlled by explicitly setting MKL_NUM_THREADS environment variable or using mkl_set_num_threads routine. So the expression iparm[2] = mkl_get_max_threads() in your code is reduntant for MKL 10.1.
The other workaround is to change PARDISO reordering scheme by setting
iparm[1] = 1;
In the case of iparm[1], MKL PARDISO uses the multiple minimum degree scheme instead of METIS and the implementation of the MMD scheme is less dependent on libc functions.
Let me know if these workarounds don't help you.
We would be much obliged to you if you give more details about your Window 64 where you observed another failure: CPU type, version of Visual Studio installed, compiler and linker used as well as full linking line.
Thanks in advance
All the best
Sergey