2016-05-12 3 views
7

Я использую numpy и scipy в разных средах (MacOS, Ubuntu, RedHat). Обычно я устанавливаю numpy с помощью диспетчера пакетов, который доступен (например, mac ports, apt, yum).Узнайте, если/какая библиотека BLAS используется Numpy

Однако, если вы не скомпилируете Numpy вручную, как вы можете быть уверены, что он использует библиотеку BLAS? Используя mac-порты, ATLAS устанавливается как зависимость. Однако я не уверен, действительно ли он используется. Когда я выполняю простой тест, функция numpy.dot() требует ок. В 2 раза больше, чем точечный продукт, который вычисляется с использованием библиотеки Eigen C++. Я не уверен, если это разумный результат ..

С наилучшими пожеланиями, APO

ответ

16

numpy.show_config() не всегда дает достоверную информацию. Например, если я apt-get install python-numpy на Ubuntu 14.04, выходной np.show_config() выглядит следующим образом:

Это выглядит так, как будто NumPy использует стандартную библиотеку CBLAS. Тем не менее, я знаю, что numpy использует OpenBLAS, который я установил через пакет libopenblas-dev.


Наиболее точный способ проверить на * Nix является использование ldd, чтобы узнать, какая разделяемые библиотеки Numpy ссылки на время выполнения (я не являюсь владельцем Mac, но я думаю, что вы можете использовать otool -L вместо ldd).

  • Для версий NumPy старше v1.10:

    ~$ ldd /<path_to_site-packages>/numpy/core/_dotblas.so 
    

    Если _dotblas.so не существует, это, вероятно, означает, что NumPy не удалось обнаружить каких-либо библиотек BLAS, когда он был первоначально составлен, в этом случае он просто не создает никаких компонентов, зависящих от BLAS.

  • Для numpy v1.10 и новее:

    _dotblas.so has been removed, но вы можете проверить зависимостей multiarray.so вместо:

    ~$ ldd /<path_to_site-packages>/numpy/core/multiarray.so 
    

Глядя на версии NumPy я установил через 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 является actua lly начало цепочки символических ссылок. Если я следовать за ними в их конечной цели, используя readlink -e, я вижу, что они указывают на мой OpenBLAS общей библиотеки:

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

Спасибо большое, что помогли мне! Действительно, он использует стандартную библиотеку libblas ... – Apoptose

1

Вы хотите проверить numpy.show_config(), чтобы увидеть, какие библиотеки настроены.

2

numpy.show_config() просто сообщает, что информация недоступна на моем Debian Linux.

Однако/usr/lib/python3/dist-packages/scipy/lib имеет подкаталог для blas, который может рассказать вам, что вы хотите. В тестах подкаталогов есть несколько тестовых программ для BLAS.

Надеюсь, это поможет.

Смежные вопросы