Документация Engee

Linux

  • Для сборки Julia требуется версия GCC 4.7 или более поздняя.

  • Для использования внешних общих библиотек, находящихся не по пути поиска системных библиотек, задайте переменные USE_SYSTEM_XXX=1 и LDFLAGS=-Wl,-rpath,/path/to/dir/contains/libXXX.so в файле Make.user.

  • Вместо задания переменной LDFLAGS можно также присвоить каталог библиотек переменной среды LD_LIBRARY_PATH (как во время компиляции, так и во время выполнения).

  • Флаги USE_SYSTEM_* следует использовать с осторожностью. Они предназначены только для устранения неполадок, портирования и упаковки в тесном сотрудничестве специалистов по обслуживанию пакетов с разработчиками Julia для обеспечения правильной сборки Julia. Для использования в рабочей среде следует применять только официально предоставляемые двоичные файлы. Проблемы, возникающие в результате использования этих флагов, как правило, не принимаются к рассмотрению.

  • См. также раздел, посвященный внешним зависимостям.

Настройка архитектуры

Чтобы выполнить сборку Julia для неуниверсальной архитектуры, можно настроить переменную Makefile ARCH в файле Make.user. Дополнительные параметры настройки, такие как MARCH и JULIA_CPU_TARGET, см. в соответствующем разделе Make.inc.

Например, чтобы выполнить сборку для Pentium 4, задайте переменную MARCH=pentium4 и установите необходимые системные библиотеки для компоновки. В Ubuntu это могут быть, помимо прочего, библиотеки lib32gfortran-6-dev, lib32gcc1 и lib32stdc++6.

Кроме того, можно задать MARCH=native и Make.user, чтобы получить сборку с максимальной производительностью, оптимизированную для ЦП текущего компьютера.

Устранение неполадок сборки Linux

Проблема Возможное решение

Сбой сборки OpenBLAS

Задайте один из следующих параметров сборки в Make.user и повторите сборку: <ul><li> OPENBLAS_TARGET_ARCH=BARCELONA (ЦП AMD) или OPENBLAS_TARGET_ARCH=NEHALEM (ЦП Intel)<ul>Задайте OPENBLAS_DYNAMIC_ARCH = 0, чтобы отключить компиляцию для нескольких архитектур в одном двоичном файле.</ul></li><li> OPENBLAS_NO_AVX2 = 1 отключает инструкции AVX2, что обеспечивает компиляцию OpenBLAS с параметром OPENBLAS_DYNAMIC_ARCH = 1 для использования старых версий binutils. </li><li> При значении USE_SYSTEM_BLAS=1 используется библиотека libblas, предоставляемая системой. <ul><li>Задайте LIBBLAS=-lopenblas и LIBBLASNAME=libopenblas для принудительного использования библиотеки OpenBLAS, предоставляемой системой, если установлено несколько версий BLAS. </li></ul></li></ul><p>При получении ошибки ../kernel/x86_64/dgemm_kernel_4x4_haswell.S:1709: Error: no such instruction: `vpermpd $ 0xb1,%ymm0,%ymm0' необходимо задать OPENBLAS_DYNAMIC_ARCH = 0 или OPENBLAS_NO_AVX2 = 1 либо требуется более новая версия binutils (2.18 или позднее). (Проблема № 7653)</p><p> Если компоновщику не удается найти gfortran и возникает ошибка julia /usr/bin/x86_64-linux-gnu-ld: cannot find -lgfortran, проверьте путь с помощью команды gfortran -print-file-name=libgfortran.so и на основе выходных данных выполните экспорт наподобие следующего: export LDFLAGS=-L/usr/lib/gcc/x86_64-linux-gnu/8/.</p>

Ошибка Illegal Instruction (Недопустимая инструкция)

Проверьте, поддерживает ли ЦП инструкции AVX, в то время как ОС не поддерживает (например, посредством виртуализации, как описано в этой проблеме).