注意:以下内容仅适用于具有64位指针的系统。使用配置Octave--enable-64不能神奇地使32位系统具有64位地址空间。
在64位系统上,默认情况下,Octave使用64位整数对数组进行索引。如果配置脚本确定BLAS库使用32位整数,则使用以下库的操作仅限于维度小于的数组2^{31}元素:
此外,以下库使用int
在内部,somaximum问题的大小总是有限的:
除了GLPK和Qhull,这些库也可以配置为使用64位整数,但大多数系统不提供以这种方式构建的软件包。如果您希望使用大型数组进行实验,以下信息可能会有所帮助。
要确定的整数大小BLASOctave使用的库,可以执行以下代码:
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个二进制位的精度。在这里的特定的例子中,没有舍入误差soccur。
通常,最好将所有这些库的版本都支持32位索引,或者所有这些库都必须支持64位索引。将64位索引库与32位索引库混合使用可能会导致不可预测的行为,包括可能丢失数据的程序崩溃。
以下说明是在x86_64 Debian系统上使用Octave和GCC 4.3.4的开发版本进行测试的,现在可能已经过时。请返回Octave错误跟踪器上的任何问题或更正。
下面列出的版本是用于测试的版本。如果这些包的新版本可用,您应该尝试使用它们,尽管可能存在一些差异。
所有库和头文件都将安装在的子目录中$prefix64
(您必须选择此目录的位置)。
两个库的参考版本都包含在参考中LAPACK 3.2.1赋值自http://www.netlib.org/.
OPTS
和NOOPT
.
在Makeconf文件
FFLAGS
.
PREFIX
到安装树的顶级目录。make solib
以创建一个共享库。make install
以安装库。将以下参数传递给make
启用64位整数BLAS库调用。在64位Windows系统上,使用-DLONGBLAS="long long"
相反
CFLAGS='-DLONGBLAS=long' CXXFLAGS='-DLONGBLAS=long'
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
其他系统可能需要不同的解决方案。
使用配置时cmake
添加标志位-DSUNDIALS_INDEX_SIZE=64.
FFLAGS
当运行configure时。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目录被编译为INTEGERS为8字节宽。如果您使用的是gfortran,配置脚本应该自动设置Makefile变量F77_INTEGER_8_FLAG
到-fdefault-integer-8。如果您正在使用另一个编译器,则必须自己设置此变量。您不应该在中设置此标志位FFLAGS
,否则中的文件liboctave/external/ranlib将被破解。
对于以下依赖项,可能不需要做任何特别的操作。如果你查找确实需要做一些事情,请提交一份错误返回。
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2