Spec-Zone.ru › NumPy 2.0

Библиотеки BLAS и LAPACK

Поведение по умолчанию при выборе BLAS и LAPACK

При вызове сборки NumPy происходит автоматическое обнаружение библиотек BLAS и LAPACK. Система сборки попытается найти подходящую библиотеку, перебирая ряд известных библиотек в определённом порядке — от наиболее производительных к наименее: MKL, Accelerate, OpenBLAS, FlexiBLAS, BLIS, обычные libblas/liblapack. Этот порядок может изменяться в зависимости от платформы или версий. Данный порядок и перебираемые библиотеки могут быть изменены с помощью опций сборки blas-order и lapack-order, например:

$ python -m pip install . -C-Dblas-order=openblas,mkl,blis -C-Dlapack-order=openblas,mkl,lapack

Первая подходящая найденная библиотека будет использована. В случае, если подходящая библиотека не найдена, сборка NumPy выведет предупреждение и затем воспользуется (медленными!) внутренними функциями NumPy. Для запрета использования этих медленных функций можно использовать опцию сборки allow-noblas.

$ python -m pip install . -C-Dallow-noblas=false

По умолчанию будет использоваться интерфейс LP64 (32-битный целочисленный) для библиотек BLAS и LAPACK. Для построения с использованием интерфейса ILP64 (64-битный целочисленный) необходимо использовать опцию сборки use-ilp64.

$ python -m pip install . -C-Duse-ilp64=true

Выбор конкретных библиотек BLAS и LAPACK

Опции сборки 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) и может быть размещён где угодно. Переменная среды 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

Полный список опций сборки, связанных с BLAS и LAPACK

BLAS и LAPACK — сложные зависимости. Некоторые библиотеки имеют больше опций, которые доступны через опции сборки (см. meson_options.txt в корне репозитория для всех опций сборки NumPy).

  • blas: имя используемой библиотеки BLAS (по умолчанию: auto),
  • lapack: имя используемой библиотеки LAPACK (по умолчанию: auto),
  • allow-noblas: разрешить ли сборку без внешних библиотек BLAS/LAPACK (по умолчанию: true),
  • blas-order: порядок библиотек BLAS для проверки обнаружения (по умолчанию может различаться в зависимости от платформы),
  • lapack-order: порядок библиотек LAPACK для проверки обнаружения,
  • use-ilp64: использовать ли интерфейс ILP64 (по умолчанию: false),
  • blas-symbol-suffix: суффикс символа для используемых библиотек (по умолчанию: auto),
  • mkl-threading: какой слой многопоточности MKL использовать, один из seq, iomp, gomp, tbb (по умолчанию: auto).

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/building/blas_lapack.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API