【发布时间】:2009-02-19 15:22:00
【问题描述】:
我如何知道 Octave 是否可以完全访问 64 位内存范围?
我可以创建一个占用超过 4GB 内存的矩阵吗?
【问题讨论】:
我如何知道 Octave 是否可以完全访问 64 位内存范围?
我可以创建一个占用超过 4GB 内存的矩阵吗?
【问题讨论】:
我意识到这个问题很老,但它仍然很相关。在 Mac 上是的,我使用了homebrew,并在下面包含了一个超过 4GB 的矩阵示例。目前此程序有效:
安装自制软件,然后在终端窗口中运行以下命令。
brew install hg
brew install --use-gcc --HEAD graphicsmagick
brew install gfortran
brew install --use-gcc gnuplot
brew install octave
然后将其添加到 ~/.octaverc:
setenv GNUTERM 'x11'
graphics_toolkit("gnuplot")
享受您的 64 位倍频程编译!
octave:1> a = zeros(500*2^10+1,2^10);
octave:2> whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
a 512001x1024 4194312192 double
ans 1x50 498 cell
Total is 524289074 elements using 4194312690 bytes
【讨论】:
我使用 MacPorts 安装了 64 位版本的 Octave (octave-devel)。安装说明可在http://shifteleven.com/articles/2011/11/06/installing-octave-on-osx-with-macports 获得。
但是,octave-devel 包似乎仍然使用 Octave 的 32 位默认索引,因此我无法加载大于 2GB 的“int8”数组。 (参考:http://www.gnu.org/software/octave/doc/interpreter/Compiling-Octave-with-64_002dbit-Indexing.html)。
这可能是由于 octave-devel 包没有编译 Octave 所依赖的 64 位版本的线性代数包。
% Load a 3GB int8 vector (32-bit limits to 2GB)
octave:1> a = zeros(1024^3*3, 1, ‘int8′);
error: memory exhausted or requested size too large for range of Octave’s index type — trying to return to prompt
64bit 处处的答案未显示有效测试,因为默认 Octave 的 32 位索引允许创建高达 16GB 的“双”数组。
【讨论】:
我不知道这是否对您有帮助,但据此:http://wiki.octave.org/wiki.pl?EnableLargeArrays,支持超过 2 GB 的数组内存是实验性的。
【讨论】:
有两件事是相关的:
64 位指针,允许大于 2 或 4GB 的内存结构
用于索引超过 2^32 个元素的数组的 64 位整数
首先,应该在 64 位系统上编译。 第二,编译octave需要--enable64,但更重要的是,你需要链接64位整数索引BLAS库。这是困难的部分。
早在 2008 年,我就设法使用 AMD blas 库(64 位整数 fortran 版本)以这种方式编译了一个 octave 版本。但是,从那时起,我就无法重现这一点,因为该库已更新并且与我们使用的 Linux 系统(Ubunto 12.04)不兼容。编译 Octave 并与第三方 BLAS 链接太难了。
我在 128 GB 内存的计算机上工作,但我的 octave 脚本仍然只能解决小问题。 2GB 对于任何人来说都应该足够了......
【讨论】:
Matlab/Octave 软件包 Psychtoolbox 有一个 64 位 MacOS 版本,带有 64 位 .mex 文件。据我所知,在 32 位 Octave 中对 .mex 文件的任何使用都会失败,并显示如下消息:
error: KbQueueReserve: /Applications/Psychtoolbox/PsychBasic/Octave3OSXFiles64/PsychHID.mex: failed to load: dlopen(/Applications/Psychtoolbox/PsychBasic/Octave3OSXFiles64/PsychHID.mex, 2): no suitable image found. Did find:
/Applications/Psychtoolbox/PsychBasic/Octave3OSXFiles64/PsychHID.mex: mach-o, but wrong architecture
是否有可以使用 64 位 .mex 文件的 Octave 版本?
这可能是一个 Psychtoolbox 问题,因为我在 /Applications/Psychtoolbox/PsychBasic 中看到了 3 个 Linux 文件架构 (Octave3LinuxFiles,Octave3LinuxFiles64,Octave3LinuxFilesARM),但对于 MacOS (Octave3OSXFiles64) 只有一个架构。
【讨论】: