Spec-Zone.ru › Octave 8

E.3 Компиляция Octave с 64-битными индексами

Примечание: следующее относится только к системам с 64-битными указателями. Настройка Octave с --enable-64 не может магическим образом сделать 32-битную систему иметь 64-битное адресное пространство.

На 64-битных системах Octave по умолчанию использует 64-битные целые числа для индексирования массивов. Если скрипт конфигурации определяет, что ваша библиотека BLAS использует 32-битные целые числа, операции, использующие следующие библиотеки, ограничены массивами с размерами, меньшими, чем 2^{31} элементов:

  • BLAS
  • LAPACK
  • QRUPDATE
  • SuiteSparse
  • SUNDIALS IDA
  • ARPACK

Кроме того, следующие библиотеки используют int внутри, поэтому максимальные размеры задач всегда ограничены:

  • GLPK
  • Qhull

За исключением GLPK и Qhull, эти библиотеки также могут быть настроены на использование 64-битных целых чисел, но большинство систем не предоставляют пакеты, построенные таким образом. Если вы хотите поэкспериментировать с большими массивами, следующая информация может быть полезной.

Чтобы определить размер целых чисел библиотеки BLAS, используемой Octave, можно выполнить следующий код:

clear all;
N = 2^31;
## The following line requires about 8 GB of RAM!
a = b = ones (N, 1, "single");
c = a' * b

Если библиотека BLAS использует 32-битные целые числа, будет выброшено исключение:

error: integer dimension or index out of range for Fortran
INTEGER type

В противном случае, если библиотека BLAS использует 64-битные целые числа, результат будет:

c = 2^31 = 2147483648

Обратите внимание, что приведенный выше тестовый случай обычно требует в два раза больше памяти, если a и b не назначены a = b = …. Кроме того, тип данных single имеет точность около 23 двоичных бит. В этом конкретном примере ошибки округления не возникают.

В общем случае лучше всего иметь все эти библиотеки в версиях, поддерживающих 32-битное индексирование, или все эти библиотеки должны поддерживать 64-битное индексирование. Смешивание библиотек с 64-битным индексированием с библиотеками с 32-битным индексированием может привести к непредсказуемому поведению, включая сбои программы с возможной потерей данных.

Следующие инструкции были протестированы с развитием версии Octave и GCC 4.3.4 на системе x86_64 Debian и могут быть устаревшими. Пожалуйста, сообщите о любых проблемах или исправлениях на трекере ошибок Octave.

Перечисленные ниже версии — это версии, используемые для тестирования. Если доступны более новые версии этих пакетов, вы должны попробовать использовать их, хотя могут быть некоторые различия.

Все библиотеки и заголовочные файлы будут установлены в подкаталогах $prefix64 (вы должны выбрать расположение этого каталога).

  • BLAS и LAPACK (http://www.netlib.org/lapack)

    Справочные версии обоих библиотек включены в дистрибутив LAPACK 3.2.1 из http://www.netlib.org/.

    • - Скопируйте файл make.inc.example и переименуйте его в make.inc. Параметры -fdefault-integer-8 и -fPIC (на 64-битных процессорах) необходимо добавить к переменной OPTS и NOOPT.
    • - После компиляции этой библиотеки убедитесь, что вы используете её для компиляции Suite Sparse и Octave. Далее мы предполагаем, что вы установили библиотеку LAPACK как $prefix64/lib/liblapack.a.
  • QRUPDATE (https://sourceforge.net/projects/qrupdate)

    В файле Makeconf:

    • - Добавьте -fdefault-integer-8 в FFLAGS.
    • - При необходимости скорректируйте переменные BLAS и LAPACK, если ваши 64-битные библиотеки BLAS и LAPACK находятся в нестандартном расположении.
    • - Установите PREFIX в верхнеуровневую директорию дерева вашей установки.
    • - Запустите make solib для создания разделяемой библиотеки.
    • - Запустите make install для установки библиотеки.
  • SuiteSparse (http://faculty.cse.tamu.edu/davis/suitesparse.html)

    Передайте следующие параметры в make для включения 64-битных целых чисел для вызовов библиотеки BLAS. На 64-битных системах Windows используйте -DLONGBLAS="long long" вместо этого.

    CFLAGS='-DLONGBLAS=long'
    CXXFLAGS='-DLONGBLAS=long'

    Файлы Make SuiteSparse не генерируют разделяемые библиотеки. В некоторых системах вы можете сгенерировать их, сделав что-то столь же простое, как

    top=$(pwd)
    for f in *.a; do
      mkdir tmp
      cd tmp
      ar vx ../$f
      gcc -shared -o ../${f%%.a}.so *.o
      cd $top
      rm -rf tmp
    done

    В других системах может потребоваться другое решение.

  • SUNDIALS IDA (https://computing.llnl.gov/projects/sundials/ida)

    При конфигурации с cmake добавьте флаг -DSUNDIALS_INDEX_SIZE=64.

  • ARPACK (https://forge.scilab.org/index.php/p/arpack-ng/)
    • - Добавьте -fdefault-integer-8 в FFLAGS при запуске configure.
    • - Запустите make для построения библиотеки.
    • - Запустите make install для установки библиотеки.
  • ATLAS вместо справочных BLAS и LAPACK

    Предложения по компиляции ATLAS будут весьма приветствуемы.

  • GLPK
  • Qhull (http://www.qhull.org)

    И GLPK, и Qhull используют int внутри, поэтому максимальные размеры задач могут быть ограничены.

  • Octave

    Поддержка 64-битных индексов в Octave активируется с помощью опции конфигурации --enable-64.

    ./configure \
      LD_LIBRARY_PATH="$prefix64/lib" \
      CPPFLAGS="-I$prefix64/include" LDFLAGS="-L$prefix64/lib" \
      --enable-64

    Необходимо убедиться, что все Fortran-исходники, кроме тех, что находятся в каталоге liboctave/external/ranlib, скомпилированы таким образом, что целые числа имеют ширину 8 байт. Если вы используете gfortran, скрипт configure автоматически установит переменную Makefile F77_INTEGER_8_FLAG в -fdefault-integer-8. Если вы используете другой компилятор, вы должны установить эту переменную самостоятельно. Не устанавливайте этот флаг в FFLAGS, иначе файлы в liboctave/external/ranlib будут скомпилированы неправильно.

  • Другие зависимости

    Вероятно, для следующих зависимостей ничего особенного делать не нужно. Если вы обнаружите, что что-то нужно сделать, пожалуйста, отправьте сообщение об ошибке.

    • - pcre
    • - zlib
    • - hdf5
    • - fftw3
    • - cURL
    • - GraphicsMagick++
    • - OpenGL
    • - freetype
    • - fontconfig
    • - fltk

© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v7.2.0/Compiling-Octave-with-64_002dbit-Indexing.html

Spec-Zone.ru

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