В этом разделе рассматриваются несколько стратегий, которые можно использовать в ситуациях, когда 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
МассивыДлинные массивы for Данная , Которая Не Помещаются в Память, разработаны, чтобы помочь вам работать с наборами данных, которые являются слишком большими, чтобы помещаться в память. 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
функция позволяет вам работать с большими наборами данных постепенно. Эта функция лежит в основе Длинные Массивы for Данная , Которая Не Помещаются в Память, and Distributed Arrays (Parallel Computing Toolbox), но можно использовать и в других целях. Datastores полезны в любое время, когда вы хотите загрузить небольшие фрагменты набора данных в память за раз.
Чтобы создать datastore, необходимо указать имя файла или директории, содержащего набор файлов с подобным форматированием. Для примера с одним файлом:
ds = datastore('path/to/file.csv')
ds = datastore('path/to/folder/')
*
чтобы выбрать все файлы определенного типа, как в:ds = datastore('data/*.csv')
Помимо хранилищ данных, MATLAB также имеет несколько других функций для загрузки частей файлов, таких как matfile
функция для загрузки фрагментов MAT-файлов. В этой таблице приведены функции частичной загрузки по типам файлов.
Тип файла | Частичная загрузка |
---|---|
MAT-файл | Загрузите часть переменной путем индексации в объект, который вы создаете с |
Текст | Используйте |
Набор из двух предметов | Можно использовать низкоуровневые функции ввода-вывода двоичных файлов, такие как |
Изображение, HDF, аудио и видео | Многие функции MATLAB, поддерживающие загрузку из файлов этих типов, позволяют вам выбрать фрагменты данных для чтения. Для получения дополнительной информации см. страницы с описанием функций, перечисленные в Поддерживаемые Форматы файлов для Импорта и Экспорта. |
Общая память, доступная приложениям на вашем компьютере, состоит из физической памяти (RAM), плюс page file или swap file на диске. Файл подкачки может быть очень большим (для примера 512 терабайт на 64-разрядной Windows®). Операционная система выделяет виртуальную память для каждого процесса в физическую память или в файл подкачки, в зависимости от потребностей системы и других процессов. Увеличение размера файла подкачки может увеличить общую доступную память, но также обычно приводит к снижению эффективности.
Большинство систем позволяют вам управлять размером файла подкачки. Необходимые шаги зависят от вашей операционной системы:
Системы Windows - Используйте Панель управления Windows Control Panel, чтобы изменить размер файла подкачки виртуальной памяти в вашей системе. Дополнительные сведения см. в справке Windows.
Linux® Системы - Измените пространство подкачки при помощи mkswap
и swapon
команды. Для получения дополнительной информации в строке приглашения Linux man
далее указывается имя команды.
Отсутствует интерфейс для непосредственного управления пространством подкачки в системах macOS.
Это process limit - это максимальное количество виртуальной памяти, которое может адресовать один процесс (или приложение). В маловероятном случае вы установили этот выбор, оно должно быть достаточно большим, чтобы вместить:
Все данные для обработки
Программа MATLAB файлы
Сам исполняемый файл MATLAB
Дополнительная информация о состоянии
64-разрядные операционные системы поддерживают предел процесса 8 терабайт. В системах Linux смотрите ulimit
команда для просмотра и установки пределов пользователя, включая виртуальную память.
В системах Linux, если вы запускаете MATLAB без Java® JVM™ можно увеличить доступную память рабочей области примерно на 400 мегабайт. Чтобы запустить MATLAB без Java JVM, используйте опцию командной строки -nojvm
. Эта опция также увеличивает размер самого большого смежного блока памяти примерно на столько же. Увеличивая самый большой непрерывный блок памяти, вы увеличиваете самый большой возможный размер матрицы.
Использование -nojvm
поставляется с штрафом в том, что вы теряете много функций, которые полагаются на программное обеспечение Java, включая всю среду разработки. Запуск MATLAB с -nodesktop
опция не сохраняет существенный объем памяти.