I recently downloaded the latest MKL library to fix another unsymmetric solver failure. While the new version fixes the previous failure in my application the latest release fails on even a small test problem. The failure occurs if you trap for FPEs. Since our main code traps for all exceptions we cannot use Pardiso unless the source of this FPE is found and removed. It is easy to recreate the problem using the attached tar file. I used the GNU compiler and I created a simple test case by modifying the test program supplied with the MKL library solvers so that it would read in a small test matrix which I am trying to solve. The matrix is unsymettric and other linear solvers - a dense solver, and SuperLU solve the exact same linear system with no errors. Pardiso also seems to solve the system as long as you ignore the FPE. We cannot do this in our production code for quality reasons and I am sure the MKL group doesn't intend to have the FPEs occuring. I will paste in the traceback that appears to show that this error occurs in the log function called from within the factorization routine in Pardiso..

error: java.lang.Exception: error: Macro run-time error: SIGFPE: floating point exception

Command: InitializeSolution

CompletedCommand: InitializeSolution

In: []

Recoverability: Non-recoverable

ServerStack: [

libStarNeo.so: SignalHandler::signalHandlerFunction(int, siginfo*, void*),

libpthread.so.0,

libm.so.6,

libm.so.6(log+0x14),

libmkl_core.so(mkl_pds_lp64_mps_pardiso+0x360),

libmkl_core.so(mkl_pds_lp64_pardiso_c+0x238d),

libmkl_core.so(mkl_pds_lp64_pardiso+0x454),

libmkl_intel_lp64.so(PARDISO+0x86),

libSundials.so(callPARDISO+0xd7),

The attached tar file contains the input matrix and uses the rows sums as the right hand side. The expected solution then is all 1's. If you comment out the call to feenableexception() the test case will obtain the correct solution. With the call in the test program the code halts on the FPE.

The following code is added to trap FPEs..

#define _GNU_SOURCE

#include

....

feenableexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW);

The Makefile is set up to use gcc and also is set up to point to the MKL library version. You also must set LD_LIBRARY_PATH on your system to point to the location of the MKL library files.

I am running this case on a Linux Red Hat Dell workstation. The MKL verion I am running is 10.3.7.256

Gene Poole

Cd-adapco