fommil / netlib-java

:rocket: High Performance Linear Algebra (low level)
Other
658 stars 168 forks source link

MKL FATAL ERROR: cannot load mkl_intel_thread.dll - with a workaround #91

Closed jdavidpeter closed 9 years ago

jdavidpeter commented 9 years ago

I try to set up Breeze on my Windows 7 x64 laptop to use intel MKL system optimized libraries for BLAS and LAPACK. I followed the netlib-java manual and created the libblas3.dll and liblapack3.dll symlinks to point to mkl_rt. I also made sure that all the other mkl libraries are on PATH and java.library.path.

The BLAS part works fine, but when netlib java tries to load the NativeSystemLAPACK implementation, I hit the MKL FATAL ERROR: cannot load mkl_intel_thread.dll. I tried to look dor the source of the error with dependency walker and attached visual studio, but I couldn't find anything. This IRC chat I found on mlapack.org gives a few hint why this is: http://www.mlpack.org/irc/mlpack.20150330.html

However, I found a workaround: I need to manually load mkl_rt.dll before netlib java LAPACK tries to initialize itself. If I call System.loadLibrary(mkl_rt), everything goes fine. When netlib java LAPACK tries to load mkl_rt alone using the symlinks I provided, something goes wrong and I have the error. Please note that BLAS loads successfully in both cases, and I triple checked that both libblas3.dll and liblapack3.dll points to the same mkl_rt. (I wouldn't have an internal MKL error if this hadn't worked anyway).

I would be really interested why this is happening, and a fix or updated documentation would be warmly welcomed.

I'm using (or trying to use) breeze 2.11 and MKL 11.1

Thank you,

David

fommil commented 9 years ago

Probably the MKL forums are the must place to discuss. Please link us up the the discussions.

fommil commented 9 years ago

Must => best