E.3 使用64位索引编译Octave

注意:以下内容仅适用于具有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 = … 分别赋值 ab,上述测试用例通常需要两倍的内存。还需注意,single 数据类型的精度约为23个二进制位。在这个特定示例中不会出现舍入误差。

通常,最好是所有这些库的版本都支持32位索引,或者所有这些库都必须支持64位索引。将支持64位索引的库与支持32位索引的库混合使用可能会导致不可预测的行为,包括程序崩溃以及可能的数据丢失。

以下说明是在x86_64 Debian系统上使用Octave开发版本和GCC 4.3.4进行测试的,现在可能已经过时。如有任何问题或更正,请在Octave错误跟踪器上报告。

下面列出的版本是测试所用的版本。如果这些软件包有更新的版本可用,您应尝试使用它们,尽管可能存在一些差异。

所有库和头文件都将安装在 $prefix64 的子目录中(您必须选择此目录的位置)。


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4