MATLAB “из памяти” ошибка

Всегда используйте пул потоков, если Вы можете, работа над высшим уровнем возможной абстракции. Пулы потоков скрывают создание и уничтожение потоков для Вас, это обычно - хорошая вещь!

10
задан Peter Mortensen 9 December 2017 в 00:28
поделиться

4 ответа

Проблема исправлена.

В Windows XP x32 мне удалось почти вдвое увеличить объем памяти, доступной для MATLAB, путем редактирования boot.ini, добавив переключателя / 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

Вместе с уменьшением размеров массива это полностью устранило проблему :)

Я мог бы также решить проблему, обновившись до Windows x64 или Windows 7 x64. Это действие также удваивает объем памяти, доступной для MATLAB, даже если вы придерживаетесь MATLAB x32 и не обновляетесь до MATLAB x64. Windows x64 просто намного эффективнее использует память даже в системах, в которых установлено всего 4 ГБ физической памяти.

6
ответ дан 3 December 2019 в 14:44
поделиться

Что вы пытаетесь выделить, когда заканчивается память (OOM)? У вас есть код для воспроизведения? Широкий спектр проблем может вызвать ошибки нехватки памяти.

Для диагностики используйте команду «dbstop if all error», чтобы установить точку останова на ошибках. Это вызовет нехватку памяти, и вы можете использовать dbup, dbdown и whos (), чтобы узнать, что потребляет память. Часто OOM вызывается неправильным размером массива или расчетом индекса, а не только большими структурами данных. Например, это вызовет OOM практически в любом 32-битном MATLAB.

>> x = 1;
>> x(2^30) = 2
??? Out of memory. Type HELP MEMORY for your options.
2
ответ дан 3 December 2019 в 14:44
поделиться

pack выполняет дефрагментацию памяти. Это может немного помочь вам в отношении доступной непрерывной памяти.

12
ответ дан 3 December 2019 в 14:44
поделиться

Помните, когда MATLAB сообщает, что не хватает памяти, это означает, что в нем нет непрерывной памяти, поэтому перезагрузка или перезапуск MATLAB может сработать.

Но я бы рекомендовал оптимизировать ваш код и идентифицировать как вы съедаете столько памяти. Это может быть плохо спроектированный рекурсивный цикл или плохая функция индексирования (использование двойников вместо логических для индексации огромной матрицы).

Я практически какое-то время жил с ошибками памяти, так как имел дело с огромными наборами данных, но есть Всегда найдется обходной путь, задавайте конкретные вопросы, и вы удивитесь .

9
ответ дан 3 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: