В зависимости от того, как ваши совпадения данных в памяти, выбирают один из следующих методов:
Если ваши данные находятся в настоящее время в памяти о вашей локальной машине, можно использовать функцию 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(___,'distributed')
. Для полного списка смотрите страницу ссылки на объект rand(___,'distributed')
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