E.3 Компиляция Octave с 64-разрядной индексацией
Примечание: следующее применимо только к системам с 64-разрядными указателями. Настройка Octave с параметром --enable-64 не может волшебным образом сделать 32-битную систему 64-разрядной адресной пространством.
На 64-разрядных системах Octave по умолчанию использует 64-разрядные целые числа для индексации массивов. Если скрипт конфигурации определяет, что ваша библиотека BLAS использует 32-разрядные целые числа, то операции, использующие следующие библиотеки, ограничены массивами с размерами, меньшими, чем 231 элементов:
- 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 из netlib.org.
- - Скопируйте файл make.inc.example и переименуйте его в make.inc. Параметры -fdefault-integer-8 и -fPIC (на 64-разрядном процессоре) должны быть добавлены к переменной
OPTSиNOOPT. - - После компиляции этой библиотеки убедитесь, что вы используете ее для компиляции Suite Sparse и Octave. В дальнейшем мы предполагаем, что вы установили библиотеку LAPACK как $prefix64/lib/liblapack.a.
- - Скопируйте файл make.inc.example и переименуйте его в make.inc. Параметры -fdefault-integer-8 и -fPIC (на 64-разрядном процессоре) должны быть добавлены к переменной
- 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'
Файлы 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для установки библиотеки.
- - Добавьте -fdefault-integer-8 к
- 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, скрипт конфигурации должен автоматически установить переменную 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/v5.2.0/Compiling-Octave-with-64_002dbit-Indexing.html