[Numpy-discussion] Proposed fix for MKL and dynamic loading

Dag Sverre Seljebotn dagss at student.matnat.uio.no
Thu Jan 21 07:29:50 EST 2010

Matthieu Brucher wrote:
>> try:
>>    import sys
>>    import ctypes
>>    _old_rtld = sys.getdlopenflags()
>>    sys.setdlopenflags(_old_rtld|ctypes.RTLD_GLOBAL)
>>    from numpy.linalg import lapack_lite
>> finally:
>>    sys.setdlopenflags(_old_rtld)
>>    del sys; del ctypes; del _old_rtld
> This also applies to scipy code that relies on BLAS as well. Lisandra
> Dalcin gave me a tip that is close to this one some months ago
> (http://matt.eifelle.com/2008/11/03/i-used-the-latest-mkl-with-numpy-and.../).
> The best official solution is to statically link against the MKL with
> Python.
IIUC, it should be enough to load the .so-s in GLOBAL mode once. So it 
is probably enough to ensure NumPy is patched in a way so that SciPy 
loads NumPy which loads the .so-s in GLOBAL mode, so that a seperate 
patch for SciPy is not necesarry. (Remains to be tried, I'm moving on to 
building SciPy now.)

As for static linking, do you mean linking MKL into the Python 
interpreter itself? Or statically linking with NumPy?

In the former case....well, even if the above solution is a 
not-officially-supported hack, I'd prefer that to messing with the 
Python build as long as it actually works, which it seems to...requiring 
custom Python builds for MKL support is not something one should do if 
one could avoid it. (I build my own Python anyway, but I suppose many 
potential NumPy/MKL users don't.)

Dag Sverre

More information about the NumPy-Discussion mailing list