繁体   English   中英

如何知道Octave是否可以完全访问64位内存范围

[英]How to know if Octave has full access to the 64 bit memory range

如何知道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

64位无处不在的答案没有显示有效的测试,因为默认的Octave的32位索引允许创建高达16GB的“双”数组。

我不知道这对你有帮助,但根据这个: http//wiki.octave.org/wiki.pl?EnableLargeArrays ,支持超过2 GB的内存用于阵列是实验性的。

有两件事是相关的:

  • 64位指针,允许比2或4GB更大的内存结构

  • 64位整数,用于索引具有2 ^ 32个元素的数组

首先,应该在64位系统上进行编译。 对于第二个,在编译八度音程时需要--enable64,但更重要的是,您需要链接64位整数索引BLAS库。 这是困难的部分。

早在2008年,我设法使用AMD blas库(64位整数fortran版本)以这种方式编译八度音阶版本。 但是,从那时起,我无法重现这一点,因为库已更新,并且与我们使用的Linux系统不兼容(Ubunto 12.04)。 编译Octave并与第三方BLAS链接太简单了。

我在128 GB内存计算机上工作,但我的八度脚本仍然只能处理小问题。 对于任何人来说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版本?

  • PsychHID.mex架构是:x86_64
  • Octave 3.4.0架构是:i386 ppc
  • 我的系统是:MacBook Pro 5,1运行MacOS 10.6.8

这可能是一个Psychtoolbox问题,因为我在/Applications/Psychtoolbox/PsychBasic看到3个Linux文件架构( Octave3LinuxFilesOctave3LinuxFiles64Octave3LinuxFilesARM ),但只有一个用于MacOS( Octave3OSXFiles64 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM