Spec-Zone.ru › NumPy 1.19

Компиляция из исходного кода

Здесь приведено общее описание процесса компиляции NumPy из исходного кода, а подробные инструкции для конкретных платформ приведены отдельно.

Предварительные условия

Для компиляции NumPy необходимо установить следующее программное обеспечение:

  1. Python 3.6.x или новее

    Обратите внимание, что также необходимо установить заголовочные файлы Python, например, в Debian/Ubuntu нужно установить как python3 так и python3-dev. В Windows и macOS это обычно не проблема.

  2. Компиляторы

    Для компиляции любых модулей расширения для Python вам потребуется компилятор C. Различные модули NumPy используют библиотеки FORTRAN 77, поэтому вам также потребуется установленный компилятор FORTRAN 77.

    Обратите внимание, что NumPy разрабатывается в основном с использованием компиляторов GNU и тестируется на компиляторах MSVC и Clang. Компиляторы других поставщиков, такие как Intel, Absoft, Sun, NAG, Compaq, Vast, Portland, Lahey, HP, IBM, поддерживаются только в виде отзывов сообщества и могут не работать сразу. Рекомендуются компиляторы GCC 4.x (и более поздние).

  3. Библиотеки линейной алгебры

    NumPy не требует установки каких-либо внешних библиотек линейной алгебры. Однако, если они доступны, скрипт настройки NumPy может их обнаружить и использовать для компиляции. Можно использовать ряд различных установок библиотек LAPACK, включая оптимизированные библиотеки LAPACK, такие как OpenBLAS или MKL. Выбор и расположение этих библиотек, а также пути включения и другие параметры сборки могут быть указаны в файле site.cfg в корневом репозитории NumPy или в файле .numpy-site.cfg в вашем домашнем каталоге. См. пример файла site.cfg.example в репозитории NumPy или в sdist для документации, а также ниже для указания приоритета поиска из переменных окружения.

  4. Cython

    Для компиляции NumPy вам потребуется последняя версия Cython.

Базовая установка

Для установки NumPy выполните:

pip install .

Для выполнения компиляции на месте, которую можно запустить из папки с исходным кодом, выполните:

python setup.py build_ext --inplace

Примечание: инструкции по компиляции для выполнения разработки в самом NumPy см. в Настройка и использование вашей среды разработки.

Тестирование

Не забудьте протестировать свои сборки. Чтобы убедиться, что все в порядке, проверьте, пройдут ли все тесты:

$ python runtests.py -v -m full

Подробную информацию о тестировании см. в Тестирование сборок.

Параллельная компиляция

Возможна параллельная компиляция с помощью:

python setup.py build -j 4 install --prefix $HOME/.local

Это позволит скомпилировать numpy на 4 процессорах и установить его в указанный префикс. Для выполнения параллельной компиляции на месте выполните:

python setup.py build_ext --inplace -j 4

Количество задач сборки также можно указать через переменную среды NPY_NUM_BUILD_JOBS.

Выбор компилятора Fortran

Компиляторы автоматически обнаруживаются; компиляция с использованием конкретного компилятора может быть выполнена с помощью --fcompiler. Например, для выбора gfortran:

python setup.py build --fcompiler=gnu95

Дополнительную информацию см. по адресу:

python setup.py build --help-fcompiler

Как проверить ABI библиотек BLAS/LAPACK

Один из относительно простых и надежных способов проверки компилятора, используемого для построения библиотеки, заключается в использовании ldd для библиотеки. Если libg2c.so является зависимостью, это означает, что использовался g77 (примечание: g77 больше не поддерживается для компиляции NumPy). Если libgfortran.so является зависимостью, использовался gfortran. Если обе являются зависимостями, это означает, что использовались обе, что почти всегда очень плохая идея.

Ускоренные библиотеки BLAS/LAPACK

NumPy ищет оптимизированные библиотеки линейной алгебры, такие как BLAS и LAPACK. Существует определенный порядок поиска этих библиотек, как описано ниже и в файле site.cfg.example.

BLAS

Стандартный порядок для библиотек:

  1. MKL
  2. BLIS
  3. OpenBLAS
  4. ATLAS
  5. Accelerate (MacOS)
  6. BLAS (NetLIB)

Если вы хотите скомпилировать с OpenBLAS, но у вас также доступен BLIS, вы можете предварительно определить порядок поиска через переменную окружения NPY_BLAS_ORDER, которая представляет собой список имен, разделенных запятыми, используемых для определения того, что искать, например:

NPY_BLAS_ORDER=ATLAS,blis,openblas,MKL python setup.py build

будет отдавать предпочтение ATLAS, затем BLIS, затем OpenBLAS, а в последнюю очередь MKL. Если ни одна из этих библиотек не найдена, сборка завершится неудачей (имена сравниваются в нижнем регистре).

LAPACK

Стандартный порядок для библиотек:

  1. MKL
  2. OpenBLAS
  3. libFLAME
  4. ATLAS
  5. Accelerate (MacOS)
  6. LAPACK (NetLIB)

Если вы хотите скомпилировать с OpenBLAS, но у вас также доступен MKL, вы можете предварительно определить порядок поиска через переменную окружения NPY_LAPACK_ORDER, которая представляет собой список имен, разделенных запятыми, например:

NPY_LAPACK_ORDER=ATLAS,openblas,MKL python setup.py build

будет отдавать предпочтение ATLAS, затем OpenBLAS, а в последнюю очередь MKL. Если ни одна из этих библиотек не найдена, сборка завершится неудачей (имена сравниваются в нижнем регистре).

Отключение ATLAS и других ускоренных библиотек

Использование ATLAS и других ускоренных библиотек в NumPy можно отключить, используя:

NPY_BLAS_ORDER= NPY_LAPACK_ORDER= python setup.py build

или:

BLAS=None LAPACK=None ATLAS=None python setup.py build

64-битные BLAS и LAPACK

Вы можете указать Numpy использовать 64-битные библиотеки BLAS/LAPACK, установив переменную среды:

NPY_USE_BLAS_ILP64=1

при компиляции Numpy. Поддерживаются следующие 64-битные библиотеки BLAS/LAPACK:

  1. OpenBLAS ILP64 с суффиксом символа 64_ (openblas64_)
  2. OpenBLAS ILP64 без суффикса символа (openblas_ilp64)

Порядок их предпочтения определяется переменными окружения NPY_BLAS_ILP64_ORDER и NPY_LAPACK_ILP64_ORDER. Значение по умолчанию равно openblas64_,openblas_ilp64.

Примечание

Использование 64-битных BLAS/LAPACK без суффикса символа в программе, которая также использует 32-битные BLAS/LAPACK, может привести к ошибкам в определенных условиях (например, с встроенными интерпретаторами Python на Linux).

64-битная библиотека OpenBLAS с суффиксом символа 64_ получается путем компиляции OpenBLAS со следующими параметрами:

make INTERFACE64=1 SYMBOLSUFFIX=64_

Суффикс символа предотвращает конфликты имен символов между 32-битными и 64-битными библиотеками BLAS/LAPACK.

Предоставление дополнительных флагов компилятора

Дополнительные флаги компилятора можно указать, установив переменные окружения OPT, FOPT (для Fortran) и CC. При предоставлении параметров, которые должны улучшить производительность кода, убедитесь, что вы также установили -DNDEBUG, чтобы код отладки не выполнялся.

© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/user/building.html

Spec-Zone.ru

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