¿Cómo puedo saber si Octave tiene acceso completo al rango de memoria de 64 bits?Cómo saber si Octave tiene acceso completo al rango de memoria de 64 bits
¿Puedo crear una matriz que utilice más de 4 GB de memoria?
¿Cómo puedo saber si Octave tiene acceso completo al rango de memoria de 64 bits?Cómo saber si Octave tiene acceso completo al rango de memoria de 64 bits
¿Puedo crear una matriz que utilice más de 4 GB de memoria?
No sé si eso te ayuda, pero de acuerdo con esto: http://wiki.octave.org/wiki.pl?EnableLargeArrays, admite más de 2 GB de memoria para la matriz experimental.
Me doy cuenta de que la pregunta es antigua pero sigue siendo bastante relevante. En una Mac sí, utilicé homebrew e incluí un ejemplo de una matriz de más de 4 GB a continuación. Actualmente este procedimiento funciona:
Instale homebrew y luego ejecute lo siguiente en una ventana de terminal.
brew install hg
brew install --use-gcc --HEAD graphicsmagick
brew install gfortran
brew install --use-gcc gnuplot
brew install octave
A continuación, añadir esto a ~/.octaverc:
setenv GNUTERM 'x11'
graphics_toolkit("gnuplot")
Disfrute de su 64 bits octava compilar!
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
Instalé una versión de 64 bits de Octave (octave-devel) con MacPorts. Las instrucciones de instalación están disponibles en http://shifteleven.com/articles/2011/11/06/installing-octave-on-osx-with-macports.
Sin embargo, parece que el paquete octave-devel todavía usa la indexación predeterminada de 32 bits de Octave, por lo que no puedo cargar matrices de 'int8' mayores de 2GB. (ref: http://www.gnu.org/software/octave/doc/interpreter/Compiling-Octave-with-64_002dbit-Indexing.html).
Esto puede deberse a que el paquete octave-devel no compila versiones de 64 bits de los paquetes de álgebra lineal de los que depende 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
de 64 bits en todas partes es la respuesta no muestra una prueba válida porque la indexación de 32 bits el valor por defecto de Octave permite la creación de matrices 'doble' de hasta 16 GB.
hay dos cosas que son relevantes:
64 punteros de bits, lo que permite estructuras de memoria de más de 2 o 4 GB
enteros de 64 bits para indexar arrays con más de 2^32 elementos
Por primera vez, la compilación en un sistema de 64 bits debería hacer. Por el segundo, necesita --enable64 en la compilación de octava, pero lo más importante es que necesita vincular con librerías BLAS de índice entero de 64 bits. Esta es la parte difícil.
Ya en 2008, logré compilar una versión de octava de esta manera, utilizando las bibliotecas AMD Blas (la versión de 64 bits enteros fortran). Sin embargo, desde entonces, no he podido reproducir esto porque la biblioteca se actualizó y no era compatible con el sistema Linux que usamos (Ubunto 12.04). Compilar Octave y enlazar con un tercero BLAS era simplemente demasiado difícil.
Trabajo en computadoras con 128 GB de memoria, pero mis scripts de octava solo pueden resolver pequeños problemas. 2GB debería ser suficiente para cualquier persona ...
El paquete Matlab/Octave Psychtoolbox tiene una versión de 64 bits de MacOS con archivos .mex de 64 bits.Por lo que yo sé, cualquier uso de los archivos .mex fallará en 32 bits de octava, con mensajes como:
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
¿Hay una versión de Octave que se pueden utilizar archivos .mex de 64 bits?
Es Es posible que esto sea un problema de Psychtoolbox, ya que veo 3 arquitecturas para archivos de Linux (Octave3LinuxFiles
, Octave3LinuxFiles64
, Octave3LinuxFilesARM
) en /Applications/Psychtoolbox/PsychBasic
, pero solo una para MacOS (Octave3OSXFiles64
).
@Somealias es correcto, los punteros siguen siendo de 32 bits. Debería ser posible solucionar algunos problemas emulando arreglos int uint de 8 bits con ints más grandes y luego enmascarando. Dado que esto no es ideal, estoy siguiendo esto en la página homebrew github. – thirdhaf