我如何知道 Octave 是否可以完全访问 64 位内存范围?
我可以创建一个使用超过 4GB 内存的矩阵吗?
我意识到这个问题很老,但它仍然很相关。在 Mac 上,是的,我使用了自制软件,并在下面包含了一个超过 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 文件。据我所知,对 .mex 文件的任何使用都将在 32 位 Octave 中失败,消息如下:
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 问题,因为我在 中看到 Linux 文件(、、、)的 3 种架构Octave3LinuxFiles
,但Octave3LinuxFiles64
对于MacOS()只有一种架构。Octave3LinuxFilesARM
/Applications/Psychtoolbox/PsychBasic
Octave3OSXFiles64