Как узнать, имеет ли Octave полный доступ к 64-битной памяти?Как узнать, имеет ли Octave полный доступ к 64-битовому диапазону памяти
Могу ли я создать матрицу, которая использует более 4 ГБ памяти?
Как узнать, имеет ли Octave полный доступ к 64-битной памяти?Как узнать, имеет ли Octave полный доступ к 64-битовому диапазону памяти
Могу ли я создать матрицу, которая использует более 4 ГБ памяти?
Я не знаю, поможет ли это вам, но в соответствии с этим: http://wiki.octave.org/wiki.pl?EnableLargeArrays, поддержка более 2 ГБ памяти для массива экспериментальна.
Я понимаю, что вопрос старый, но он по-прежнему весьма уместен. На Mac да, я использовал homebrew и включил пример матрицы размером более 4 ГБ ниже. В настоящее время эта процедура работает:
Установите доморощенный, а затем запустите следующее в окне терминала.
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
Я установил 64-разрядную версию Octave (октава-девел) с использованием MacPorts. Инструкции по установке доступны по адресу http://shifteleven.com/articles/2011/11/06/installing-octave-on-osx-with-macports.
Однако оказалось, что пакет octave-devel по-прежнему использует 32-битную индексацию по умолчанию Octave, поэтому я не могу загрузить массивы «int8» размером более 2 ГБ. (ref: http://www.gnu.org/software/octave/doc/interpreter/Compiling-Octave-with-64_002dbit-Indexing.html).
Это может быть вызвано пакетом octave-devel, не компилирующим 64-битные версии пакетов линейной алгебры, от которых зависит Octave.
% 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 везде это ответ не показывает действительный тест, потому что 32-битная индексация по умолчанию Октава в позволяет создавать «двойные» массивы до 16 Гб.
Есть две вещи, которые имеют отношение:
64-битные указатели, позволяющие более крупные структуры памяти, чем 2 или 4 Гб
64-битных чисел для индексации массивов с более чем 2^32 элементов
Для первого следует выполнить сборку на 64-битной системе. Для второго вам нужно --enable64 в компиляции октавы, но что более важно, вам нужно связать с 64-битными библиотеками BLAS с индексированием целых чисел. Это трудная часть.
Еще в 2008 году мне удалось скомпилировать версию октавы таким образом, используя библиотеки AMD blas (64-битная целочисленная версия fortran). Однако с тех пор я не смог воспроизвести это, потому что библиотека обновилась и не была совместима с используемой нами системой Linux (Ubunto 12.04). Компиляция Octave и связь с третьей стороной BLAS были слишком сложными.
Я работаю на 128 ГБ компьютерах памяти, но мои октавные скрипты все еще могут решать только небольшие проблемы. 2GB должно быть достаточно для любого ...
Пакет Matlab/Octave Psychtoolbox имеет 64-разрядную версию MacOS с 64-разрядными файлами .mex.Насколько я знаю, любое использование .mex файлов произойдет сбой в 32-битном октавы, с сообщениями как:
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 файлы?
Это возможно, что это проблема Psychtoolbox, так как я вижу 3 архитектуры для файлов Linux (Octave3LinuxFiles
, Octave3LinuxFiles64
, Octave3LinuxFilesARM
) в /Applications/Psychtoolbox/PsychBasic
, но только для MacOS (Octave3OSXFiles64
).
@Somealias правильно, указатели все еще 32-битные. Должно быть возможно обойти некоторые проблемы, эмулируя 8-битные массивы int или uint с более крупными int и затем маскируя. Поскольку это вряд ли идеально, я слежу за этим на странице homebrew github. – thirdhaf