Эта тема объясняет несколько стратегий, которые можно использовать в ситуациях, где MATLAB® исчерпывает память. MATLAB является 64-битным приложением, которое работает на 64-битных операционных системах. Это возвращает сообщение об ошибке каждый раз, когда это запрашивает сегмент памяти от операционной системы, которая больше, чем, что доступно.
MATLAB имеет встроенную защиту от создания массивов, которые являются слишком большими. По умолчанию MATLAB может использовать до 100% RAM (не включая виртуальную память) вашего компьютера, чтобы выделить память для массивов, и если массив превысил бы тот порог, то 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. See array size limit or preference panel for more information.
A = rand(1e6,1e6);
Out of memory. Type "help memory" for your options.
Неважно, как вы сталкиваетесь с пределами памяти, существует несколько разрешений, доступных в зависимости от ваших целей. Методы, обсужденные в Стратегиях Эффективного использования Памяти, могут помочь вам оптимизировать доступную память, включая которую вы имеете:
Если вы уже используете память эффективно, и проблема сохраняется, то остающиеся разделы этой страницы содержат возможные решения.
tall
МассивыДлинные массивы для Данных, которые не помещаются в память, спроектированы, чтобы помочь вам работать с наборами данных, которые являются слишком большими, чтобы поместиться в память. MATLAB работает с маленькими блоками данных за один раз, автоматически обрабатывая все разделение на блоки данных и обработку в фоновом режиме. Существует два первичных способа, которыми можно усилить длинные массивы:
Если у вас есть большой массив, который умещается в памяти, но у вас заканчивается память, когда вы пытаетесь выполнить вычисления, можно бросить массив к длинному массиву:
B = tall(A)
Если у вас есть файл или основанные на папке данные, можно создать datastore
и затем создайте высокий массив поверх datastore:
ds = datastore('path/to/data.csv');
tt = tall(ds);
datastore
работает и с районами локальных и с удаленных данных, данные, с которыми вы работаете, не должны быть на компьютере, который вы используете, чтобы анализировать их. Смотрите работу с Удаленными данными для получения дополнительной информации.
Если у вас есть кластер компьютеров, можно использовать Parallel Computing Toolbox™ и Распределенные Массивы (Parallel Computing Toolbox), чтобы выполнить вычисления с помощью объединенной памяти обо всех машинах в кластере. Это позволяет вам работать с целым распределенным массивом как одна сущность. Однако рабочие действуют только с их стороны массива, и автоматически передают данные между собой при необходимости.
Создание распределенного массива очень похоже на создание длинного массива:
ds = datastore('path/to/data.csv');
dt = distributed(ds);
Другой возможный способ зафиксировать проблемы памяти состоит в том, чтобы только импортировать в MATLAB такое количество большого набора данных, как вам нужно для задачи, которую вы пытаетесь решить. Это обычно не проблема при импорте из источников, таких как база данных, где можно явным образом искать элементы, совпадающие с запросом. Но это - типичная проблема с загрузкой большого плоского текста или двоичных файлов.
datastore
функция позволяет вам работать с большими наборами данных инкрементно. Эта функция подкрепляет Длинные массивы для Данных, которые не помещаются в память, и Распределенных Массивов (Parallel Computing Toolbox), но можно использовать его для других целей также. Хранилища данных полезны любое время, вы хотите загрузить небольшие части набора данных в память за один раз.
Чтобы создать datastore, необходимо обеспечить имя файла или директории, содержащей набор файлов с подобным форматированием. Например, с одним файлом:
ds = datastore('path/to/file.csv')
ds = datastore('path/to/folder/')
*
выбрать все файлы определенного типа, как в:ds = datastore('data/*.csv')
Кроме хранилищ данных, MATLAB также имеет несколько других функций, чтобы загрузить части файлов, такие как matfile
функционируйте, чтобы загрузить фрагменты MAT-файлов. Эта таблица суммирует частичные функции загрузки типом файла.
FileType | Частичная загрузка |
---|---|
Matfile | Загрузите часть переменной путем индексации в объект, который вы создаете с |
Текст | Используйте |
Двоичный файл | Можно использовать низкоуровневые функции ввода-вывода двоичного файла, такие как |
Отобразите, HDF, аудио и видео | Многие функции MATLAB, которые поддерживают загрузку от этих типов файлов, позволяют вам выбирать фрагменты данных, чтобы читать. Для получения дополнительной информации смотрите страницы ссылки на функцию, перечисленные в Поддерживаемых Форматах файлов для Импорта и экспорта. |
Общая память, доступная для приложений на вашем компьютере, состоит из физической памяти (RAM), плюс page file или swap file, на диске. Файл подкачки может быть очень большим (например, 512 терабайт на 64-битном Windows®). Операционная система выделяет виртуальную память для каждого процесса к физической памяти или к файлу подкачки, в зависимости от потребностей системы и других процессов. Увеличение размера файла подкачки может увеличить общую доступную память, но также и обычно приводит к более медленной производительности.
Большинство систем позволяет вам управлять размером своего файла подкачки. Включенные шаги зависят от вашей операционной системы:
Windows Systems Используйте Панель управления Windows Control Panel, чтобы изменить размер страничного файла виртуальной памяти в вашей системе. Для получения дополнительной информации обратитесь к справке Windows.
Linux® Systems — Измените свою область подкачки при помощи mkswap
и swapon
команды. Для получения дополнительной информации, в подсказке Linux вводят man
сопровождаемый названием команды.
Нет никакого интерфейса для того, чтобы непосредственно управлять областью подкачки в macOS системах.
process limit является максимальной суммой виртуальной памяти, к которой может обратиться один процесс (или приложение). В маловероятном случае вы установили эту настройку, это должно быть достаточно большим, чтобы разместить:
Все данные к процессу
Файлы программы MATLAB
Сам исполняемый файл MATLAB
Дополнительная информация состояния
64-битные операционные системы поддерживают предел процесса 8 терабайт. В системах Linux смотрите ulimit
команда, чтобы просмотреть и пределы пользователя аппарата включая виртуальную память.
В системах Linux, если вы запускаете MATLAB без Java® JVM™, можно увеличить доступную память рабочей области приблизительно на 400 мегабайтов. Чтобы запустить MATLAB без JVM Java, используйте параметр командной строки -nojvm
. Эта опция также увеличивает размер самого большого непрерывного блока памяти приблизительно той же суммой. Путем увеличения самого большого непрерывного блока памяти вы увеличиваете самый большой матричный размер.
Используя -nojvm
идет со штрафом в этом, вы теряете много функций, которые используют программное обеспечение Java, включая целую среду разработки. Стартовый MATLAB с -nodesktop
опция не сохраняет значительного количества памяти.