注意:以下内容仅适用于具有64位指针的系统。使用 --enable-64 配置Octave并不能神奇地使32位系统拥有64位地址空间。
在64位系统上,Octave默认使用64位整数进行数组索引。如果配置脚本确定您的 BLAS 库使用32位整数,那么使用以下库的操作将限于维度小于 2^{31} 个元素的数组:
此外,以下库内部使用 int,因此最大问题规模始终受限:
除了 GLPK 和 Qhull 之外,这些库也可以配置为使用64位整数,但大多数系统不提供以这种方式构建的软件包。如果您希望使用大型数组进行实验,以下信息可能会有所帮助。
要确定Octave所使用的 BLAS 库的整数大小,可以执行以下代码:
clear all; N = 2^31; ## 以下行需要约8 GB的内存! 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位索引的库混合使用可能会导致不可预测的行为,包括程序崩溃以及可能的数据丢失。
以下说明是在x86_64 Debian系统上使用Octave开发版本和GCC 4.3.4进行测试的,现在可能已经过时。如有任何问题或更正,请在Octave错误跟踪器上报告。
下面列出的版本是测试所用的版本。如果这些软件包有更新的版本可用,您应尝试使用它们,尽管可能存在一些差异。
所有库和头文件都将安装在 $prefix64 的子目录中(您必须选择此目录的位置)。
两个库的参考版本都包含在来自 http://www.netlib.org/ 的参考 LAPACK 3.2.1 发行版中。
OPTS 和 NOOPT 中。在 Makeconf 文件中:
FFLAGS。PREFIX 设置为安装树的顶级目录。make solib 以创建共享库。make install 以安装库。将以下选项传递给 make,以启用对 BLAS 库调用的64位整数支持。在64位Windows系统上,请使用 -DLONGBLAS="long long" 代替。
CFLAGS='-DLONGBLAS=long' CXXFLAGS='-DLONGBLAS=long'
SuiteSparse 的 makefile 不会生成共享库。在某些系统上,您可以通过执行以下简单操作来生成它们:
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
其他系统可能需要不同的解决方案。
使用 cmake 配置时,添加标志 -DSUNDIALS_INDEX_SIZE=64。
FFLAGS。make 来构建库。make install 来安装库。欢迎就如何编译 ATLAS 提出建议。
GLPK 和 Qhull 都在内部使用 int,因此最大问题规模可能受到限制。
Octave 的64位索引支持通过 configure 选项 --enable-64 激活。
./configure \ LD_LIBRARY_PATH="$prefix64/lib" \ CPPFLAGS="-I$prefix64/include" LDFLAGS="-L$prefix64/lib" \ --enable-64
您必须确保除 liboctave/external/ranlib 目录中的文件之外的所有 Fortran 源文件都被编译为 INTEGER 宽度为8字节。如果您使用的是 gfortran,配置脚本应自动将 Makefile 变量 F77_INTEGER_8_FLAG 设置为 -fdefault-integer-8。如果您使用的是其他编译器,则必须自行设置此变量。您不应在 FFLAGS 中设置此标志,否则 liboctave/external/ranlib 中的文件将被错误编译。
以下依赖项可能不需要特殊处理。如果您发现确实需要做某些操作,请提交错误报告。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-4