E.3 Компиляция Octave с 64-разрядной индексацией ¶
Примечание: следующее относится только к системам с 64-разрядными указателями. Настройка Octave с --enable-64 не может чудесным образом преобразовать 32-разрядную систему в 64-разрядную адресную систему.
На 64-разрядных системах Octave по умолчанию использует 64-разрядные целые числа для индексирования массивов. Если скрипт configure определяет, что ваша библиотека 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.
- Скопируйте файл 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 в
© 1996–2023 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.2.0/Compiling-Octave-with-64_002dbit-Indexing.html