Как проверить связь BLAS / LAPACK в NumPy и SciPy? - PullRequest
121 голосов
/ 25 января 2012

Я строю свое окружение для скучных и отвратительных вещей, основываясь на бласе и лапаке, более или менее основываясь на этом проходе.

Когда я закончу, как я могу проверить, что мои функции numpy / scipy действительно используют ранее созданные функции blas / lapack?

Ответы [ 5 ]

285 голосов
/ 14 октября 2013

Метод numpy.__config__.show() выводит информацию о связи, собранную во время сборки.Мой вывод выглядит так.Я думаю, это означает, что я использую BLAS / LAPACK, который поставляется с Mac OS.

>>>import numpy as np
>>>np.__config__.show()

lapack_opt_info:
    extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
    extra_compile_args = ['-msse3']
    define_macros = [('NO_ATLAS_INFO', 3)]
blas_opt_info:
    extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
    extra_compile_args = ['-msse3', '-I/System/Library/Frameworks/vecLib.framework/Headers']
    define_macros = [('NO_ATLAS_INFO', 3)]
29 голосов
/ 25 января 2012

То, что вы ищете, это: информация о системе

Я скомпилировал numpy / scipy с атласом, и я могу проверить это с помощью:

import numpy.distutils.system_info as sysinfo
sysinfo.get_info('atlas')

Проверьтедокументация для дополнительных команд.

11 голосов
/ 25 января 2012

Поскольку он использует динамически загруженные версии, вы можете просто сделать это:

$ ldd anyoftheCmodules.so

, где anyoftheCmodules.so может быть, например, numpy/core/_dotblas.so, что указывает на libblas.so.

8 голосов
/ 25 января 2012

Вы можете использовать инструмент зависимостей загрузчика ссылок, чтобы посмотреть компоненты хука уровня C вашей сборки и посмотреть, есть ли у них внешние зависимости от вашего блаза и других предпочтений.Я не нахожусь рядом с Linux-боксом, но на машине с OS X вы можете сделать это в каталоге site-packages, в котором находятся установки:

$ otool -L numpy/core/_dotblas.so 
numpy/core/_dotblas.so:
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 268.0.1)

$ otool -L scipy/linalg/flapack.so 
scipy/linalg/flapack.so (architecture i386):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 242.0.0)
scipy/linalg/flapack.so (architecture ppc):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)

$ otool -L scipy/linalg/fblas.so 
scipy/linalg/fblas.so (architecture i386):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 242.0.0)
scipy/linalg/fblas.so (architecture ppc):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)

вместо ldd вместо otoolв системе GNU / Linux, и вы должны получить ответы, которые вам нужны.

4 голосов
/ 19 июля 2018

Вы можете отобразить связь BLAS, LAPACK, MKL, используя show_config():

import numpy as np
np.show_config()

Что для меня дает вывод:

mkl_info: libraries = ['mkl_rt', 'pthread'] library_dirs = ['/my/environment/path/lib'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] include_dirs = ['/my/environment/path/include'] blas_mkl_info: libraries = ['mkl_rt', 'pthread'] library_dirs = ['/my/environment/path/lib'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] include_dirs = ['/my/environment/path/include'] blas_opt_info: libraries = ['mkl_rt', 'pthread'] library_dirs = ['/my/environment/path/lib'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] include_dirs = ['/my/environment/path/include'] lapack_mkl_info: libraries = ['mkl_rt', 'pthread'] library_dirs = ['/my/environment/path/lib'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] include_dirs = ['/my/environment/path/include'] lapack_opt_info: libraries = ['mkl_rt', 'pthread'] library_dirs = ['/my/environment/path/lib'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] include_dirs = ['/my/environment/path/include']

...