В зависимости от того, как ваши совпадения данных в памяти, выбирают один из следующих методов:
Если ваши данные находятся в настоящее время в памяти о вашей локальной машине, можно использовать distributed
функция, чтобы распределить существующий массив от клиентской рабочей области до рабочих параллельного пула. Эта опция может быть полезна для тестирования или прежде, чем выполнить операции, которые значительно увеличивают размер ваших массивов, таких как repmat
.
Если ваши данные не помещаются в память о вашей локальной машине, но действительно помещаются в память о вашем кластере, можно использовать datastore
с distributed
функционируйте, чтобы считать данные в память о рабочих параллельного пула.
Если ваши данные не помещаются в память о вашем кластере, можно использовать datastore
с tall
массивы, чтобы разделить и обработать ваши данные во фрагментах. См. также Рабочий процесс Больших данных с использованием высоких массивов и хранилищ данных.
datastore
Если ваши данные не помещаются в память о вашей локальной машине, но действительно помещаются в память о вашем кластере, можно использовать datastore
с distributed
функция, чтобы создать распределенные массивы и разделить данные среди ваших рабочих.
В этом примере показано, как создать и загрузить распределенные массивы с помощью datastore
. Создайте datastore с помощью табличного файла данных о полете. Этот набор данных слишком мал, чтобы показать равное разделение данных по рабочим. Чтобы симулировать большой набор данных, искусственно увеличьте размер datastore с помощью repmat
.
files = repmat({'airlinesmall.csv'}, 10, 1);
ds = tabularTextDatastore(files);
Выберите переменные в качестве примера.
ds.SelectedVariableNames = {'DepTime','DepDelay'}; ds.TreatAsMissing = 'NA';
Составьте распределенную таблицу путем чтения datastore параллельно. Разделите datastore с одним разделом на рабочего. Каждый рабочий затем Считывает все данные от соответствующего раздела. Файлы должны быть в общем ресурсе, который доступен рабочими.
dt = distributed(ds);
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.
Отобразите итоговую информацию о распределенной таблице.
summary(dt)
Variables: DepTime: 1,235,230×1 double Values: min 1 max 2505 NaNs 23,510 DepDelay: 1,235,230×1 double Values: min -1036 max 1438 NaNs 23,510
Определите размер длинной таблицы.
size(dt)
ans = 1235230 2
Возвратите первые несколько строк dt
.
head(dt)
ans = DepTime DepDelay _______ ________ 642 12 1021 1 2055 20 1332 12 629 -1 1446 63 928 -2 859 -1 1833 3 1041 1
Наконец, проверяйте, сколько данных каждый рабочий загрузил.
spmd, dt, end
Lab 1: This worker stores dt2(1:370569,:). LocalPart: [370569×2 table] Codistributor: [1×1 codistributor1d] Lab 2: This worker stores dt2(370570:617615,:). LocalPart: [247046×2 table] Codistributor: [1×1 codistributor1d] Lab 3: This worker stores dt2(617616:988184,:). LocalPart: [370569×2 table] Codistributor: [1×1 codistributor1d] Lab 4: This worker stores dt2(988185:1235230,:). LocalPart: [247046×2 table] Codistributor: [1×1 codistributor1d]
Обратите внимание на то, что данные разделены одинаково по рабочим. Для получения дополнительной информации о datastore
, смотрите то, Что Datastore? MATLAB
Для получения дополнительной информации о рабочих процессах для больших данных, смотрите, Выбирают Parallel Computing Solution.
Если ваши совпадения данных в памяти о вашей локальной машине, можно использовать распределенные массивы, чтобы разделить данные среди рабочих. Используйте distributed
функция, чтобы создать распределенный массив в клиенте MATLAB и хранить его данные на рабочих открытого параллельного пула. Распределенный массив распределяется в одной размерности, и максимально равномерно по тому измерению среди рабочих. Вы не можете управлять деталями распределения при создании распределенного массива.
Можно создать распределенный массив несколькими способами:
Используйте distributed
функция, чтобы распределить существующий массив от клиентской рабочей области до рабочих параллельного пула.
Используйте любой distributed
функции, чтобы непосредственно создать распределенный массив на рабочих. Этот метод не требует, чтобы массив уже существовал в клиенте, таким образом, уменьшая клиентские требования к памяти рабочей области. Функции включают
и eye
(___, 'распределенный')
. Для полного списка смотрите rand
(___, 'распределенный')distributed
страница ссылки на объект.
Создайте codistributed массив в spmd
оператор, и затем получает доступ к нему как к распределенному массиву вне spmd
оператор. Этот метод позволяет вам использовать схемы распределения кроме значения по умолчанию.
Первые два метода не включают spmd
в создании массива, но можно использовать spmd
управлять массивами создало этот путь. Например:
Создайте массив в клиентской рабочей области, и затем сделайте ее распределенным массивом.
parpool('local',2) % Create pool W = ones(6,6); W = distributed(W); % Distribute to the workers spmd T = W*2; % Calculation performed on workers, in parallel. % T and W are both codistributed arrays here. end T % View results in client. whos % T and W are both distributed arrays here. delete(gcp) % Stop pool
В качестве альтернативы можно использовать codistributed
функция, которая позволяет вам управлять большим количеством опций, таких как размерности и разделы, но часто более сложна. Можно создать codistributed
массив путем выполнения на самих рабочих, любая внутренняя часть spmd
оператор, в pmode
, или в связывающемся задании. При создании codistributed
массив, можно управлять всеми аспектами распределения, включая размерности и разделы.
Отношение между распределенными и codistributed массивами является одной из перспективы. Массивы Codistributed разделены среди рабочих, от которых вы выполняете код, чтобы создать или управлять ими. Когда вы создаете распределенный массив в клиенте, можно получить доступ к нему как к codistributed массиву в spmd
оператор. Когда вы создаете codistributed массив в spmd
оператор, можно получить доступ к нему как к распределенному массиву в клиенте. Только spmd
операторы позволяют вам получить доступ к тем же данным массива от двух других точек зрения.
Можно создать codistributed
массив несколькими способами:
Используйте codistributed
функционируйте в spmd
оператор, связывающееся задание или pmode
к codistribute данным, уже существующим на рабочих, запускающих то задание.
Используйте любую из функций codistributed, чтобы непосредственно создать codistributed массив на рабочих. Этот метод не требует, чтобы массив уже существовал в рабочих. Функции включают
и eye
(___, 'codistributed')
. Для полного списка смотрите rand
(___, 'codistributed')codistributed
страница ссылки на объект.
Создайте распределенный массив вне spmd
оператор, затем получите доступ к нему как к codistributed массиву в spmd
оператор, работающий на том же параллельном пуле.
Создайте codistributed массив в spmd
оператор с помощью схемы распределения не по умолчанию. Во-первых, задайте 1D распределение по третьему измерению с 4 частями на рабочем 1 и 12 частями на рабочем 2. Затем создайте 3 3 16 массивами нулей.
parpool('local',2) % Create pool spmd codist = codistributor1d(3,[4,12]); Z = zeros(3,3,16,codist); Z = Z + labindex; end Z % View results in client. % Z is a distributed array here. delete(gcp) % Stop pool
Для получения дополнительной информации о codistributed массивах смотрите Работу с Массивами Codistributed.
codistributed
| datastore
| distributed
| eye
| rand
| repmat
| spmd
| tall