2009-08-14 3 views
9

Quando eseguo uno script di esempio in MATLAB, si dice:MATLAB "out of memory" errore

Out of memory. Digitare HELP MEMORY per le opzioni.

Quando digito "memoria", si riferisce:

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. 

C'è un modo per aggirare questo errore? Sto usando Windows XP x32 con MATLAB 2009a.

+1

esattamente cosa si esegue? – Martijn

+1

La registrazione dello script di esempio (o delle parti in cui si verifica un errore, se è lunga) aiuterà le persone a risolvere meglio il problema specifico. – gnovice

risposta

6

Problema risolto.

In Windows XP x32, sono riuscito a quasi il doppio della quantità di memoria disponibile per MATLAB modificando boot.ini per aggiungere il parametro/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 

Insieme con la riduzione nostri formati di array, questo completamente risolto il problema :)

Avrei potuto anche risolto il problema con l'aggiornamento a Windows x64 o Windows   7 x64. Questo atto raddoppia anche la quantità di memoria disponibile per MATLAB, anche se si rimane con MATLAB x32 e non si aggiorna a MATLAB x64. Windows x64 è molto più efficiente in termini di memoria, anche con sistemi con solo 4   GB di RAM fisica installata.

+3

"ha solo 4 GB di RAM fisica" - heh, è ​​tutto relativo –

+0

Sì! Quando avevo 16 anni e l'orgoglioso proprietario di un XT con 640KByte di RAM, non avrei mai creduto che qualcuno avesse detto "Bene, ragazzo, un giorno farai il seguente commento ..." – Contango

+1

[Timex- Sinclair 1000] (http://en.wikipedia.org/wiki/Timex_Sinclair_1000) ca. 1982 aveva 2K di RAM; abbiamo comprato un modulo di memoria 16K plug-in per qualcosa come $ 40. Lavoro con i dispositivi dsPIC per il mio lavoro, arrivano ovunque da 1K a 48K di RAM. I PIC a 8 bit hanno meno: alcune parti PIC10 hanno 16 byte (non kilobyte, * byte * ... ** BYTES ** HA HA HA) di RAM. Quindi anche nel 2015 è ancora relativo. :-) –

12

pack esegue una deframmentazione della memoria. Potrebbe aiutarti un po 'per quanto riguarda la memoria contigua disponibile.

+0

Grazie per il commento. Apprezzato! – Contango

+0

ha funzionato come un fascino! – Deven

9

Ricordare che quando MATLAB dice che la memoria è esaurita, significa che è fuori dalla memoria contigua, quindi il riavvio o il riavvio di MATLAB potrebbe funzionare.

Tuttavia, ti consiglio di ottimizzare il codice e identificare il modo in cui stai consumando così tanta memoria. Potrebbe essere un ciclo ricorsivo mal progettato, o una funzione di indicizzazione errata (usando i doppi invece dei logici per indicizzare una matrice enorme).

Praticamente ho vissuto con errori di memoria per un po 'dato che avevo a che fare con enormi set di dati, ma c'è sempre una soluzione alternativa, porre domande specifiche e sarai surprised.

2

Che cosa stai tentando di allocare quando esaurisce la memoria (OOM)? Hai il codice da riprodurre? Una vasta gamma di problemi può causare errori di memoria insufficiente.

Per diagnosticare, utilizzare "dbstop se tutti gli errori" per impostare un punto di interruzione sugli errori. La memoria insufficiente attiverà questo, e puoi usare dbup, dbdown e whos() per vedere cosa sta consumando memoria. Spesso un OOM è causato da una cattiva dimensione dell'array o dal calcolo dell'indice, non solo dalle grandi strutture di dati. Per esempio. questo attiverà un OOM in quasi tutti i MATLAB a 32 bit.

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

Grazie per il commento. Apprezzato! Il problema è ora risolto (vedi sotto). – Contango

+1

@Gravitas: cosa c'è "sotto"? Si prega di provare a non fare affidamento sull'ordine quando si invia una risposta. – Arafangion

1

Prova questo, funziona bene per me.

  • Vai alla Home -> icona Preferenze -> Generale -> Java memoria heap -> destinare quale dimensione di memoria che si desidera
  • Nella finestra Preferenze, andare a "spazio di lavoro" (fuori livello di memoria heap Java) -> Vedere "Limite dimensione array Matlab" Assicurarsi di deselezionare "Limita la dimensione massima dell'array a una percentuale di RAM". Perché vuoi estendere la memoria quindi non abbiamo bisogno di questa funzionalità.
  • Fatto.