Spec-Zone.ru › Octave 6

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

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

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

  • BLAS
  • LAPACK
  • QRUPDATE
  • SuiteSparse
  • 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 двоичных бит. В этом конкретном примере ошибки округления не возникают.

Следующие инструкции были протестированы с разработкой версии 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

    Другие системы могут потребовать другого решения.

  • 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, скомпилированы таким образом, чтобы INTEGERS имели ширину 8 байт. Если вы используете gfortran, скрипт конфигурации должен автоматически установить переменную 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/v6.4.0/Compiling-Octave-with-64_002dbit-Indexing.html

Spec-Zone.ru

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