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

vdexp crashes calling it from java in Linux Fedora


In our company we have a multi thread application that uses the MKL from Java and JNI. The code that gives us problems copies data in simple precision to double (in order to avoid performance problems with denormalized floats) and then calls the exponential. I would be something like this:

[cpp]       // This buffer is used as input an output
        double *bufIn = new double;

        register std::size_t i;
        for (i = 0; i < n; i++, ip1 += is1)
            bufIn = (double)*((R*)ip1);

        vdExp ((MKL_INT)n, bufIn, bufIn);

        for (i=0; i < n; i++, op1 += os1)
            *((R*)op1) = ( bufIn);

        delete []bufIn;

Recently we moved to MKL 10.2 ( Since then in our Fedora 9 (it does not repoduce in other distributions) we are getting SIGSEVs inside the exponential but it does not seem a corrupted memory issue because the code above is reentrant.

Having a look to the included Java examples we noticed the next line in the makefile for executing the examples.


We have a customized library that includes the sequential MKL statically, basically we use the next line to link with MKL:

[bash]-Wl,--start-group libmkl_intel_lp64.a libmkl_sequential.a libmkl_core.a -Wl,--end-group [/bash]

So if we set the LD_PRELOAD pointing to our custom library the problem disappears.

On the other hand we have experienced the issue described and here doing some test with the MKL in parallel mode.

So now we wonder if there is any kind of conflict between the Java signal handling (we know the JVM uses SIGSEV inside) and the MKL one and how it can be solved for different cases.

0 Kudos
1 Reply

The issues (with signal handling by libiomp5) described in the previous posts were resolved in Composer 2011 beta update 2 and Compiler Pro 12.0 beta update 1. Now the defualt behaviour of libiomp is do nothandle signals. But it can be turned on by setting (environment variable) KMP_HANDLE_SIGNALS to 1. Please, try to run your tests with using the latest Composer (at least Composer 2011 beta update 2 or Compiler Pro 12.0 beta update 1) .

0 Kudos