Averigüe si / que biblioteca BLAS es utilizada por Numpy

Uso numpy y scipy en diferentes entornos (MacOS, Ubuntu, RedHat). Por lo general, instalo numpy utilizando el administrador de paquetes que está disponible (por ejemplo, mac ports, apt, yum).

Sin embargo, si no comstack Numpy manualmente, ¿cómo puede estar seguro de que utiliza una biblioteca BLAS? Usando los puertos mac, ATLAS se instala como una dependencia. Sin embargo, no estoy seguro de si realmente se utiliza. Cuando realizo un punto de referencia simple, la función numpy.dot() requiere aprox. 2 veces el tiempo que un producto de puntos que se calcula utilizando la biblioteca Eigen C ++. No estoy seguro si este es un resultado razonable.

Saludos cordiales, Apo

numpy.show_config() no siempre proporciona información confiable. Por ejemplo, si tengo apt-get install python-numpy en Ubuntu 14.04, la salida de np.show_config() ve así:

 blas_info: libraries = ['blas'] library_dirs = ['/usr/lib'] language = f77 lapack_info: libraries = ['lapack'] library_dirs = ['/usr/lib'] language = f77 atlas_threads_info: NOT AVAILABLE blas_opt_info: libraries = ['blas'] library_dirs = ['/usr/lib'] language = f77 define_macros = [('NO_ATLAS_INFO', 1)] atlas_blas_threads_info: NOT AVAILABLE openblas_info: NOT AVAILABLE lapack_opt_info: libraries = ['lapack', 'blas'] library_dirs = ['/usr/lib'] language = f77 define_macros = [('NO_ATLAS_INFO', 1)] ... 

Parece que numpy está utilizando la biblioteca estándar de CBLAS. Sin embargo, sé a ciencia cierta que numpy está utilizando OpenBLAS, que instalé a través del paquete libopenblas-dev .


La forma más definitiva de verificar * nix es usar ldd para averiguar con qué bibliotecas compartidas se enlazan varios enlaces en tiempo de ejecución (no tengo una Mac, pero creo que puedes usar otool -L en lugar de ldd ).

  • Para versiones de numpy anteriores a v1.10:

     ~$ ldd //numpy/core/_dotblas.so 

    Si _dotblas.so no existe, es probable que esto signifique que Numpy no pudo detectar ninguna biblioteca BLAS cuando se compiló originalmente, en cuyo caso simplemente no genera ninguno de los componentes dependientes de BLAS.

  • Para numpy v1.10 y más reciente:

    _dotblas.so ha sido eliminado , pero puedes verificar las dependencias de multiarray.so lugar:

     ~$ ldd //numpy/core/multiarray.so 

Mirando la versión de numpy que instalé vía apt-get :

 ~$ ldd /usr/lib/python2.7/dist-packages/numpy/core/_dotblas.so linux-vdso.so.1 => (0x00007fff12db8000) libblas.so.3 => /usr/lib/libblas.so.3 (0x00007fce7b028000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fce7ac60000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fce7a958000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fce7a738000) /lib64/ld-linux-x86-64.so.2 (0x00007fce7ca40000) 

/usr/lib/libblas.so.3 es en realidad el comienzo de una cadena de enlaces simbólicos. Si los sigo a su objective final utilizando readlink -e , veo que apuntan a mi biblioteca compartida OpenBLAS:

 ~$ readlink -e /usr/lib/libblas.so.3 /usr/lib/openblas-base/libblas.so.3 

numpy.show_config () simplemente le dice que la información no está disponible en mi Debian Linux.

Sin embargo, / usr / lib / python3 / dist-packages / scipy / lib tiene un subdirectorio para blas que puede decirle lo que quiere. Hay un par de progtwigs de prueba para BLAS en las pruebas de subdirectorio.

Espero que esto ayude.

Desea comprobar numpy.show_config() para ver qué bibliotecas están configuradas.