E.3 Компиляция Octave с 64-разрядной индексацией
Примечание: приведённая ниже информация относится только к системам с 64-разрядными указателями. Настройка Octave с параметром --enable-64 не может волшебным образом обеспечить 64-разрядное адресное пространство в 32-разрядной системе.
В 64-разрядных системах Octave по умолчанию использует 64-разрядные целые числа для индексации массивов. Если сценарий configure определит, что ваша библиотека BLAS использует 32-разрядные целые числа, то операции с использованием следующих библиотек будут ограничены массивами, размеры которых меньше 2^{31} элементов:
- BLAS
- LAPACK
- QRUPDATE
- SuiteSparse
- SUNDIALS IDA
- ARPACK
Кроме того, следующие библиотеки используют int внутри себя, поэтому максимальные размеры задач всегда ограничены:
- GLPK
- Qhull
За исключением GLPK и Qhull, эти библиотеки также можно настроить для использования 64-разрядных целых чисел, однако большинство систем не предоставляют собранные таким образом пакеты. Если вы хотите поэкспериментировать с большими массивами, приведённая ниже информация может оказаться полезной.
Чтобы определить размер целых чисел в используемой Octave библиотеке BLAS, можно выполнить следующий код:
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 в системе Debian x86_64 и, возможно, уже устарели. Сообщайте о проблемах и исправлениях в системе отслеживания ошибок Octave.
Ниже указаны версии, использованные при тестировании. Если доступны более новые версии этих пакетов, попробуйте использовать их, хотя некоторые детали могут отличаться.
Все библиотеки и заголовочные файлы будут установлены во вложенные каталоги $prefix64 (расположение этого каталога нужно выбрать самостоятельно).
-
BLAS и LAPACK (http://www.netlib.org/lapack)
Эталонные версии обеих библиотек входят в дистрибутив эталонной версии LAPACK 3.2.1, доступный на сайте http://www.netlib.org/.
- Скопируйте файл make.inc.example и назовите его make.inc. К переменным
OPTSиNOOPTнеобходимо добавить параметры -fdefault-integer-8 и -fPIC (на 64-разрядном процессоре). - После компиляции этой библиотеки убедитесь, что используете её при компиляции Suite Sparse и Octave. Далее предполагается, что библиотека LAPACK установлена как $prefix64/lib/liblapack.a.
- Скопируйте файл make.inc.example и назовите его make.inc. К переменным
- QRUPDATE (https://sourceforge.net/projects/qrupdate)
В файле Makeconf:
- Добавьте -fdefault-integer-8 к
FFLAGS. - При необходимости настройте переменные BLAS и LAPACK, если ваши библиотеки BLAS и LAPACK с поддержкой 64-разрядных целых чисел находятся в нестандартном расположении.
- Задайте
PREFIX, указав корневой каталог дерева установки. - Выполните
make solib, чтобы создать динамическую библиотеку. - Выполните
make install, чтобы установить библиотеку.
- Добавьте -fdefault-integer-8 к
- SuiteSparse (http://faculty.cse.tamu.edu/davis/suitesparse.html)
Передайте следующие параметры команде
make, чтобы включить поддержку 64-разрядных целых чисел при вызовах библиотеки BLAS. В 64-разрядных системах Windows используйте вместо этого-DLONGBLAS="long long".CFLAGS='-DLONGBLAS=long' CXXFLAGS='-DLONGBLAS=long'
Makefile-файлы 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/)
- При запуске configure добавьте -fdefault-integer-8 к
FFLAGS. - Выполните
make, чтобы собрать библиотеку. - Выполните
make install, чтобы установить библиотеку.
- При запуске configure добавьте -fdefault-integer-8 к
- ATLAS вместо эталонных версий BLAS и LAPACK
Будем признательны за рекомендации по компиляции ATLAS.
- GLPK
- Qhull (http://www.qhull.org)
И GLPK, и Qhull используют внутри себя
int, поэтому максимальные размеры задач могут быть ограничены. - Octave
Поддержка 64-разрядной индексации в Octave включается параметром configure --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–2026 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/v9.4.0/Compiling-Octave-with-64_002dbit-Indexing.html