В этом разделе описывается несколько стратегий, которые можно использовать в ситуациях, когда в MATLAB ® не хватает памяти. MATLAB - 64-разрядное приложение, работающее в 64-разрядных операционных системах. Он возвращает сообщение об ошибке всякий раз, когда запрашивает у операционной системы сегмент памяти, превышающий доступный .
MATLAB имеет встроенную защиту от создания слишком больших массивов. По умолчанию MATLAB может использовать до 100% оперативной памяти (не включая виртуальную память) компьютера для выделения памяти массивам, и если массив превысит это пороговое значение, MATLAB возвращает ошибку. Например, эта инструкция пытается создать массив с необоснованным размером:
A = rand(1e6,1e6);
Error using rand Requested 1000000x1000000 (7450.6GB) array exceeds maximum array size preference. Creation of arrays greater than this limit may take a long time and cause MATLAB to become unresponsive. More information
A = rand(1e6,1e6);
Out of memory. More information
Независимо от того, как вы сталкиваетесь с ограничениями памяти, существует несколько разрешений, доступных в зависимости от ваших целей. Методы, описанные в разделе Стратегии эффективного использования памяти, помогут оптимизировать имеющуюся память, в том числе:
Если память уже используется эффективно и проблема сохраняется, то остальные разделы этой страницы содержат возможные решения.
tall МножестваМассивы Tall Array for Out-of-Memory Data предназначены для работы с наборами данных, слишком большими для того, чтобы их можно было поместить в память. MATLAB работает с небольшими блоками данных одновременно, автоматически обрабатывая все данные в фоновом режиме. Существует два основных способа использования массивов tall:
Если имеется большой массив, который помещается в память, но при выполнении вычислений не хватает памяти, можно привести массив к высокому массиву:
B = tall(A)
При наличии данных на основе файлов или папок можно создать datastore а затем создайте высокий массив поверх хранилища данных:
ds = datastore('path/to/data.csv');
tt = tall(ds);datastore работает как с локальным, так и с удаленным расположением данных, данные, с которыми вы работаете, не обязательно должны находиться на компьютере, который вы используете для их анализа. Дополнительные сведения см. в разделе Работа с удаленными данными.
При наличии кластера компьютеров можно использовать параллельные вычислительные Toolbox™ и распределенные массивы (Parallel Computing Toolbox) для выполнения вычислений с использованием объединенной памяти всех машин в кластере. Это позволяет работать со всем распределенным массивом как с одной сущностью. Однако работники работают только на своей части массива и при необходимости автоматически передают данные между собой.
Создание распределенного массива очень похоже на создание массива высокого уровня:
ds = datastore('path/to/data.csv');
dt = distributed(ds);Другим возможным способом устранения проблем с памятью является импорт в MATLAB только большого набора данных, необходимого для решения проблемы. Обычно это не проблема при импорте из таких источников, как база данных, где можно явно искать элементы, соответствующие запросу. Но это обычная проблема с загрузкой больших плоских текстовых или двоичных файлов.
datastore функция позволяет работать с большими наборами данных постепенно. Эта функция лежит в основе Tall Array for Out-of-Memory Data and Distributed Arrays (Parallel Computing Toolbox), но ее можно использовать и для других целей. Хранилища данных полезны в любое время, когда требуется загрузить небольшие части набора данных в память одновременно.
Для создания хранилища данных необходимо указать имя файла или каталога, содержащего коллекцию файлов с аналогичным форматированием. Например, с одним файлом:
ds = datastore('path/to/file.csv')ds = datastore('path/to/folder/')* для выбора всех файлов определенного типа, как в:ds = datastore('data/*.csv')Помимо хранилищ данных, MATLAB также имеет несколько других функций для загрузки частей файлов, таких как matfile для загрузки частей MAT-файлов. В этой таблице представлены функции частичной загрузки по типу файла.
| Тип файла | Частичная загрузка |
|---|---|
| MAT-файл | Загрузка части переменной путем индексирования в объект, созданный с помощью |
| Текст | Используйте |
| Набор из двух предметов | Можно использовать низкоуровневые двоичные файловые функции ввода-вывода, такие как |
| Изображение, HDF, аудио и видео | Многие функции MATLAB, поддерживающие загрузку из этих типов файлов, позволяют выбирать части данных для чтения. Дополнительные сведения см. на страницах ссылок на функции, перечисленных в разделе Поддерживаемые форматы файлов для импорта и экспорта. |
Общий объем памяти, доступной приложениям на компьютере, состоит из физической памяти (ОЗУ), а также файла подкачки или файла подкачки на диске. Файл подкачки может быть очень большим (например, 512 терабайт в 64-разрядной Windows ®). Операционная система распределяет виртуальную память для каждого процесса в физическую память или в файл подкачки в зависимости от потребностей системы и других процессов. Увеличение размера файла подкачки может увеличить общий объем доступной памяти, но также обычно приводит к снижению производительности.
Большинство систем позволяют управлять размером файла подкачки. Соответствующие шаги зависят от операционной системы:
Системы Windows - изменение размера файла подкачки виртуальной памяти в системе с помощью панели управления Windows. Дополнительные сведения см. в справке Windows.
Системы Linux ® - измените область подкачки с помощью mkswap и swapon команды. Для получения дополнительной информации, по типу приглашения Linux man за которым следует имя команды.
Отсутствует интерфейс для непосредственного управления пространством подкачки в системах macOS.
Ограничение процесса - это максимальный объем виртуальной памяти, который может быть использован одним процессом (или приложением). В маловероятном случае, если вы установили эту настройку, она должна быть достаточно большой, чтобы соответствовать:
Все данные для обработки
Файлы программ MATLAB
Сам исполняемый файл MATLAB
Дополнительная информация о состоянии
64-разрядные операционные системы поддерживают ограничение процесса в 8 терабайт. В системах Linux см. ulimit для просмотра и установки пользовательских ограничений, включая виртуальную память.
В системах Linux, если запустить MATLAB без Java ® JVM™, можно увеличить доступную рабочую память приблизительно на 400 мегабайт. Для запуска MATLAB без Java JVM используйте параметр командной строки-nojvm. Этот параметр также увеличивает размер наибольшего смежного блока памяти примерно на такую же величину. Увеличивая наибольший смежный блок памяти, вы увеличиваете максимально возможный размер матрицы.
Используя -nojvm со штрафом в том, что вы теряете многие функции, которые зависят от программного обеспечения Java, включая всю среду разработки. Запуск MATLAB с помощью -nodesktop не экономит значительный объем памяти.