Come posso sapere se Octave ha pieno accesso all'intervallo di memoria a 64 bit?Come sapere se Octave ha pieno accesso all'intervallo di memoria a 64 bit
Posso creare una matrice che utilizza più di 4 GB di memoria?
Come posso sapere se Octave ha pieno accesso all'intervallo di memoria a 64 bit?Come sapere se Octave ha pieno accesso all'intervallo di memoria a 64 bit
Posso creare una matrice che utilizza più di 4 GB di memoria?
Non so se questo ti aiuta ma in base a questo: http://wiki.octave.org/wiki.pl?EnableLargeArrays, il supporto su 2 GB di memoria per array è sperimentale.
Mi rendo conto che la domanda è vecchia ma è ancora abbastanza pertinente. Su un Mac sì, ho usato homebrew e includo un esempio di una matrice oltre 4 GB di seguito. Attualmente questa procedura funziona:
Installare homebrew e quindi eseguire quanto segue in una finestra di terminale.
brew install hg
brew install --use-gcc --HEAD graphicsmagick
brew install gfortran
brew install --use-gcc gnuplot
brew install octave
Quindi aggiungere questo a ~/.octaverc:
setenv GNUTERM 'x11'
graphics_toolkit("gnuplot")
Godetevi il vostro 64 bit ottava compilare!
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
Ho installato una versione a 64 bit di Octave (octave-devel) utilizzando MacPorts. Le istruzioni di installazione sono disponibili al http://shifteleven.com/articles/2011/11/06/installing-octave-on-osx-with-macports.
Tuttavia, sembra che il pacchetto octave-devel utilizzi ancora l'indicizzazione predefinita di Octave a 32 bit, quindi non è possibile caricare matrici di "int8" superiori a 2 GB. (riferimento: http://www.gnu.org/software/octave/doc/interpreter/Compiling-Octave-with-64_002dbit-Indexing.html).
Questo potrebbe essere causato dal pacchetto octave-devel che non compila le versioni a 64 bit dei pacchetti di algebra lineare da cui Octave dipende.
% 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 è ovunque risposta non mostra un test valido perché l'indicizzazione a 32 bit il valore di default di Octave permette la creazione di array 'doppio' fino a 16GB.
Ci sono due cose che sono rilevanti:
64 bit puntatori, permettendo strutture di memoria più grande di 2 o 4GB
64 interi bit per le matrici di indicizzazione con più di 2^32 elementi
Per la prima, la compilazione su un sistema a 64 bit dovrebbe fare. Per il secondo, è necessario --enable64 nella compilazione di ottava, ma, soprattutto, è necessario collegarsi con le librerie BLAS di indice intero a 64 bit. Questa è la parte difficile.
Nel 2008, sono riuscito a compilare una versione di ottava in questo modo, utilizzando le librerie blas AMD (la versione fortran a 64 bit interi). Tuttavia, da allora, non sono stato in grado di riprodurlo, perché la libreria è stata aggiornata e non era compatibile con il sistema Linux che usiamo (Ubunto 12.04). Compilare Octave e collegarsi a un BLAS di terze parti era semplicemente troppo difficile.
Io lavoro su 128 GB di memoria, ma i miei script di ottava possono ancora solo affrontare piccoli problemi. 2 GB dovrebbe essere sufficiente per chiunque ...
Il pacchetto Matlab/Octave Psychtoolbox ha una versione MacOS a 64 bit con file .mex a 64 bit.Per quanto ne so, qualsiasi uso dei file .mex fallirà a 32 bit Octave, con messaggi come:
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
Esiste una versione di Octave che possono utilizzare i file .mex a 64 bit?
E ' possibile che questo è un problema Psychtoolbox, siccome vedo 3 architetture per i file di Linux (Octave3LinuxFiles
, Octave3LinuxFiles64
, Octave3LinuxFilesARM
) in /Applications/Psychtoolbox/PsychBasic
, ma solo uno per MacOS (Octave3OSXFiles64
).
@Somealias è corretta, i puntatori sono ancora a 32 bit. Dovrebbe essere possibile aggirare alcuni problemi emulando gli array int o uint a 8 bit con valori maggiori e mascherando. Dal momento che questo non è l'ideale, lo sto seguendo sulla pagina github homebrew. – thirdhaf