2009-08-14 12 views
9

Kiedy uruchomić przykładowy skrypt w programie MATLAB, to mówi:MATLAB "z pamięci" błąd

Out of memory. Wpisz HELP MEMORY dla twoich opcji.

Po wpisaniu "pamięci", zgłasza:

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. 

Czy istnieje jakiś sposób, aby obejść ten problem? Używam systemu Windows XP x32 z MATLAB 2009a.

+1

co dokładnie uruchamiasz? – Martijn

+1

Publikowanie przykładowego skryptu (lub jego części, w których występują błędy, jeśli jest długi), pomoże użytkownikom lepiej rozwiązać problem. – gnovice

Odpowiedz

6

Naprawiono problem.

pod Windows XP x32, udało mi się prawie dwukrotnie większą ilość pamięci dostępnej dla MATLAB poprzez edycję pliku boot.ini aby dodać przełącznik/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 

Wraz ze zmniejszeniem nasze rozmiary tablic, to całkowicie naprawiło problem :)

Mogłem też naprawić problem poprzez uaktualnienie do Windows x64 lub Windows   7 x64. Ta czynność podwaja również ilość pamięci dostępnej dla MATLAB, nawet jeśli trzymasz się MATLAB x32 i nie aktualizujesz do MATLAB x64. Windows x64 jest o wiele bardziej wydajny w pamięci, nawet w przypadku systemów, w których zainstalowana jest tylko 4   GB fizycznej pamięci RAM.

+3

"ma tylko 4 GB fizycznej pamięci RAM" - hej, to wszystko jest względne –

+0

Tak! Kiedy miałem 16 lat i byłem dumnym właścicielem XT z 640 kilobajtami pamięci RAM, nigdy bym nie uwierzył, gdyby ktoś powiedział: "No cóż, chłopcze, pewnego dnia napiszesz następujący komentarz ..." – Contango

+1

[Timex- Sinclair 1000] (http://en.wikipedia.org/wiki/Timex_Sinclair_1000) ca. 1982 miał 2K pamięci RAM; kupiliśmy dodatkowy moduł pamięci 16K za około 40 USD. Pracuję z urządzeniami dsPIC dla mojej pracy, pochodzą z dowolnego miejsca od 1K do 48K pamięci RAM. 8-bitowe PIC mają mniej: niektóre części PIC10 mają 16 bajtów (nie kilobajtów, * bajtów * ... ** ** BYTES ** HA HA HA) RAM. Tak więc nawet w 2015 roku wciąż jest względny. :-) –

12

pack dokonuje defragmentacji pamięci. To może ci pomóc w miarę możliwości dostępnej pamięci.

+0

Dzięki za komentarz. Doceniony! – Contango

+0

pracował jak urok! – Deven

9

Pamiętaj, że gdy MATLAB mówi, że brakuje pamięci, oznacza to, że nie ma przylegającej pamięci, dlatego może działać ponowne uruchamianie lub restartowanie MATLAB-a.

Ale, polecam zoptymalizować kod i określić, w jaki sposób spożywasz tak dużo pamięci. Może to być źle zaprojektowana pętla rekursywna lub zła funkcja indeksowania (używanie podwójnych zamiast logicznych do indeksowania ogromnej matrycy).

Praktycznie żyłem z błędami pamięci przez jakiś czas, ponieważ miałem do czynienia z ogromnymi zbiorami danych, ale zawsze istnieje obejście problemu, zadawanie konkretnych pytań i będziesz surprised.

2

Co próbujesz przydzielić, kiedy zabraknie pamięci (OOM)? Czy masz kod do powielenia? Szeroki zakres problemów może powodować błędy pamięci.

Aby zdiagnozować, użyj "dbstop if all error", aby ustawić punkt przerwania na błędach. Spowoduje to brak pamięci i możesz użyć dbup, dbdown i whos(), aby zobaczyć, ile zajmuje pamięć. Często OOM jest spowodowane złym rozmiarem macierzy lub obliczeniem indeksu, nie tylko przez duże struktury danych. Na przykład. to uruchomi OOM w prawie każdym 32-bitowym MATLAB.

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

Dzięki za komentarz. Doceniony! Problem został naprawiony (patrz poniżej). – Contango

+1

@Gravitas: Co to jest "poniżej"? Podczas zamieszczania odpowiedzi nie należy polegać na zamówieniu. – Arafangion

1

Spróbuj tego, działa dobrze dla mnie.

  • Przejdź do Start -> ikona Preferencje -> Ogólne -> Java Heap Memory -> Przeznaczyć co wielkość pamięci chcesz
  • W oknie Preferencje, przejdź do "Workspace" (z poziomu pamięci sterty Java) -> Zobacz "Ograniczenie rozmiaru macierzy Matlab" Upewnij się, że nie zaznaczono opcji "Ogranicz maksymalną wielkość tablicy do wartości procentowej pamięci RAM". Ponieważ chcesz rozszerzyć pamięć , więc nie potrzebujemy tej funkcji.
  • Gotowe.
Powiązane problemy