Problem pojawia się, gdy Matlab zaczyna korzystać z pamięci wirtualnej. Zwykle powinieneś zabić proces Matlaba za pomocą Menedżera zadań, ale nie zawsze jest to pożądane. Nie ma prostego wewnętrznego przełącznika Matlab, który, niestety, na całym świecie ograniczy maksymalny rozmiar tablicy.
Co zrobić, aby rozmiar pliku wymiany był bardzo mały, aby program Matlab nie mógł go w rzeczywistości dużo zapisać, ale może to z kolei wpłynąć na wydajność innych programów. Inne rozwiązania, inne niż Matlab, to przejście na Linuksa (gdzie można łatwiej ustawić ograniczenia pamięci dla programu, patrz odpowiedź @ BenVoigt na szczegóły na temat setting limits on both Windows and Linux) lub uruchomić wszystko na maszynie wirtualnej.
Na przyszłość, w moich symulacjach, mam metodę (podfunkcje, jeśli nie chcesz tego robić OOP) na początku mojej wstępnej alokacji, która oblicza szacunkowe całkowite wykorzystanie pamięci z uwzględnieniem parametrów symulacji (# elementów wszystkich dużych tablic Używam razy 8 dla podwójnych jest pamięcią w bajtach), a to rzuca błąd, gdy używałby zbyt dużo pamięci RAM.
Oto przykład szybkiej kontroli pamięci. Wiem, że zamierzam przydzielić tablice 3 m-by-by-t-t i tablice 5 m-by-t, wszystkie są podwójne.
maxMemFrac = 0.8; %# I want to use at most 80% of the available memory
numElements = 3 * (m * 3 * t) + 5 * (m * t);
numBytesNeeded = numElements * 8; %# I use double
%# read available memory
[~,memStats] = memory;
if numBytesNeeded > memStats.PhysicalMemory.Available * maxMemFrac
error('MYSIM:OUTOFMEMORY','too much memory would be needed')
end
Jonas, dzięki za odpowiedzi, które można opisać bardziej szczegółowo, jak robicie/korzystania z RAM-kalkulatora metody tutaj? Myślę, że będzie to praktyczne rozwiązanie, jeśli będę mógł z niego korzystać. Dzięki. – Spacey
Przełącz na system Linux? Z tego, co wiemy, mógł już używać Linuksa. –
@BenVoigt Jestem na maszynie Windows, nie sądzę, przejście na Lunix może być wykonalne dla mnie teraz. – Spacey