BLAS и LAPACK#
Поведение по умолчанию для выбора BLAS и LAPACK#
При сборке NumPy обнаружение библиотек BLAS и LAPACK происходит
автоматически. Система сборки попытается найти подходящую библиотеку,
и проверит ряд известных библиотек в определённом порядке — от наиболее
производительных к наименее. Типичный порядок: MKL, Accelerate, OpenBLAS, FlexiBLAS, BLIS,
plain libblas/liblapack. Это может различаться в зависимости от платформы или выпусков. Этот порядок и то, какие библиотеки пробуются, можно изменить через
blas-order и lapack-order опции сборки, например:
$ python -m pip install . -Csetup-args=-Dblas-order=openblas,mkl,blis -Csetup-args=-Dlapack-order=openblas,mkl,lapack
Будет использована первая подходящая библиотека, которая найдена. Если подходящая
библиотека не найдена, сборка NumPy выведет предупреждение и затем использует (медленные!)
внутренние резервные процедуры NumPy. Чтобы запретить использование этих медленных процедур, allow-noblas опция сборки может быть использована:
$ python -m pip install . -Csetup-args=-Dallow-noblas=false
По умолчанию будет использоваться интерфейс LP64 (32-битное целое число) к BLAS и LAPACK.
Для сборки с интерфейсом ILP64 (64-битное целое число) необходимо использовать
use-ilp64 опция сборки:
$ python -m pip install . -Csetup-args=-Duse-ilp64=true
Выбор конкретных библиотек BLAS и LAPACK#
The blas и lapack опции сборки установлены в "auto" по умолчанию, что означает попытку использовать все известные библиотеки. Если вы хотите использовать конкретную библиотеку, вы можете установить эти опции сборки в имя библиотеки (обычно имя в нижнем регистре, которое pkg-config ожидает). Например, чтобы выбрать простой libblas и
liblapack (это обычно Netlib BLAS/LAPACK в дистрибутивах Linux, и может
динамически переключаться между реализациями на conda-forge), используйте:
$ # for a development build
$ spin build -C-Dblas=blas -C-Dlapack=lapack
$ # to build and install a wheel
$ python -m build -Csetup-args=-Dblas=blas -Csetup-args=-Dlapack=lapack
$ pip install dist/numpy*.whl
$ # Or, with pip>=23.1, this works too:
$ python -m pip install . -Csetup-args=-Dblas=blas -Csetup-args=-Dlapack=lapack
Другие опции, которые должны работать (при условии, что они установлены с
pkg-config поддержка; в противном случае они все еще могут быть обнаружены, но вещи
по своей природе более хрупкие) включают openblas, mkl, accelerate,
atlas и blis.
Использование pkg-config для обнаружения библиотек в нестандартном расположении#
Принцип обнаружения BLAS и LAPACK под капотом заключается в том, что Meson пытается
обнаружить указанные библиотеки сначала с помощью pkg-config, а затем с CMake. Если у вас есть только отдельный файл общей библиотеки (например,
armpl_lp64.so в /a/random/path/lib/ и соответствующий заголовочный файл в /a/random/path/include/), то вам нужно создать собственный файл pkg-config. Он должен иметь соответствующее имя (так что в этом примере, armpl_lp64.pc) и может находиться где угодно. The
PKG_CONFIG_PATH переменная окружения должна указывать на
расположение .pc файл. Содержимое этого файла должно быть:
libdir=/path/to/library-dir # e.g., /a/random/path/lib
includedir=/path/to/include-dir # e.g., /a/random/path/include
version=1.2.3 # set to actual version
extralib=-lm -lpthread -lgfortran # if needed, the flags to link in dependencies
Name: armpl_lp64
Description: ArmPL - Arm Performance Libraries
Version: ${version}
Libs: -L${libdir} -larmpl_lp64 # linker flags
Libs.private: ${extralib}
Cflags: -I${includedir}
Чтобы проверить, что это работает как ожидалось, вы должны иметь возможность запустить:
$ pkg-config --libs armpl_lp64
-L/path/to/library-dir -larmpl_lp64
$ pkg-config --cflags armpl_lp64
-I/path/to/include-dir