【问题标题】:How to know if Octave has full access to the 64 bit memory range如何知道 Octave 是否可以完全访问 64 位内存范围
【发布时间】:2009-02-19 15:22:00
【问题描述】:

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

我可以创建一个占用超过 4GB 内存的矩阵吗?

【问题讨论】:

    标签: 64-bit octave


    【解决方案1】:

    我意识到这个问题很老,但它仍然很相关。在 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
    

    【讨论】:

    • @Somealias 是正确的,指针仍然是 32 位的。应该可以通过模拟具有更大整数的 8 位整数或 uint 数组然后进行屏蔽来解决一些问题。由于这并不理想,因此我在自制 github 页面上对此进行了跟进。
    【解决方案2】:

    我使用 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 的“双”数组。

    【讨论】:

      【解决方案3】:

      我不知道这是否对您有帮助,但据此:http://wiki.octave.org/wiki.pl?EnableLargeArrays,支持超过 2 GB 的数组内存是实验性的。

      【讨论】:

        【解决方案4】:

        有两件事是相关的:

        • 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 对于任何人来说都应该足够了......

        【讨论】:

          【解决方案5】:

          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 版本?

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-05-19
            • 2021-12-06
            • 2013-08-15
            • 1970-01-01
            • 2015-02-01
            • 2012-12-19
            • 1970-01-01
            • 2013-11-29
            相关资源
            最近更新 更多