2009-08-14 20 views
9

Cuando ejecuto un script de ejemplo en MATLAB, que dice:MATLAB "sin memoria" error

Fuera de la memoria. Escriba HELP MEMORY para sus opciones.

Cuando escribo "memoria", informa:

Maximum possible array:    156 MB (1.638e+008 bytes) * 
Memory available for all arrays: 740 MB (7.756e+008 bytes) ** 
Memory used by MATLAB:    1054 MB (1.105e+009 bytes) 
Physical Memory (RAM):    3070 MB (3.219e+009 bytes) 

* Limited by contiguous virtual address space available. 
** Limited by virtual address space available. 

¿Hay alguna manera de evitar este error? Estoy usando Windows XP x32 con MATLAB 2009a.

+1

¿exactamente qué ejecuta? – Martijn

+1

Publicar el script de muestra (o las partes donde se produce un error, si es largo) ayudará a las personas a abordar mejor su problema específico. – gnovice

Respuesta

6

Problema solucionado.

En Windows XP x32, he conseguido casi el doble de la cantidad de memoria disponible para MATLAB mediante la edición de boot.ini para agregar el modificador/3GB/USERVA = 3030

[boot loader] 
timeout=30 
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS 
[operating systems] 
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /3GB /USERVA=3030 

Junto con la reducción de los tamaños de matriz, esto solucionó completamente el problema :)

Podría haber solucionado el problema actualizando a Windows x64 o Windows   7 x64. Esta acción también duplica la cantidad de memoria disponible para MATLAB, incluso si se queda con MATLAB x32 y no actualiza a MATLAB x64. Windows x64 es mucho más eficiente con la memoria, incluso con sistemas que solo tienen 4   GB de RAM física instalada.

+3

"solo tiene 4 GB de RAM física" - heh, todo es relativo –

+0

¡Sí! Cuando tenía 16 años y era el orgulloso propietario de un XT con 640 KB de RAM, nunca lo hubiera creído si alguien hubiera dicho "Bueno, chico, algún día harás el siguiente comentario ..." – Contango

+1

[Timex- Sinclair 1000] (http://en.wikipedia.org/wiki/Timex_Sinclair_1000) ca. 1982 tenía 2K de RAM; compramos un módulo de memoria 16K enchufable por algo así como $ 40. Trabajo con dispositivos dsPIC para mi trabajo, vienen con entre 1K y 48K de RAM. Los PIC de 8 bits tienen menos: algunas partes PIC10 tienen 16 bytes (no kilobytes, * bytes * ... ** BYTES ** HA HA HA) de RAM. Entonces, incluso en 2015, sigue siendo relativo. :-) –

12

pack realiza una desfragmentación de memoria. Puede ayudarlo un poco en cuanto a la memoria contigua disponible.

+0

Gracias por el comentario. ¡Apreciado! – Contango

+0

funcionó como un encanto! – Deven

9

Recuerde, cuando MATLAB dice que se ha quedado sin memoria, significa que está fuera de la memoria contigua, por lo que reiniciar o reiniciar MATLAB puede funcionar.

Pero, recomendaría optimizar su código e identificar cómo está consumiendo tanta memoria. Podría ser un ciclo recursivo mal diseñado o una función de indexación incorrecta (usar dobles en lugar de lógicos para indexar una matriz enorme).

Prácticamente viví con errores de memoria por un tiempo ya que lidiaba con enormes conjuntos de datos, pero siempre hay una solución alternativa, haga preguntas específicas y será surprised.

2

¿Qué intenta asignar cuando se queda sin memoria (OOM)? ¿Tienes código para reproducir? Una amplia gama de problemas puede causar errores de falta de memoria.

Para diagnosticar, use "dbstop if all error" para establecer un punto de interrupción en los errores. La falta de memoria activará esto, y puede usar dbup, dbdown y whos() para ver qué está consumiendo la memoria. A menudo, un OOM es causado por un mal tamaño de matriz o cálculo de índice, no solo por las estructuras de big data. P.ej. esto disparará un OOM en prácticamente cualquier MATLAB de 32 bits.

>> x = 1; 
>> x(2^30) = 2 
??? Out of memory. Type HELP MEMORY for your options. 
+0

Gracias por el comentario. ¡Apreciado! El problema ahora está solucionado (ver abajo). – Contango

+1

@Gravitas: ¿Qué es "abajo"? Intente no confiar en el orden cuando publique una respuesta. – Arafangion

1

Prueba esto, funciona bien para mí.

  • Ir a Inicio -> icono de Preferencia -> General -> Java memoria de la pila -> Asignar qué tamaño de la memoria que desea
  • En la ventana de preferencias, vaya a "espacio de trabajo" (fuera de nivel de memoria de almacenamiento dinámico Java) -> Ver "Límite de tamaño de la matriz Matlab" Asegúrese de desmarcar la opción 'Limitar el tamaño máximo de la matriz a un porcentaje de RAM'. Porque desea ampliar la memoria para que no necesitemos esta característica.
  • Hecho.
Cuestiones relacionadas