Создайте распределенный массив из данных в клиентской рабочей области или datastore
создает распределенный массив из a D = distributed(ds)datastore
dsD распределенный массив, сохраненный в частях на рабочих открытого параллельного пула. Вы работаете с целым массивом как одна сущность, однако, рабочие действуют только с их стороны массива, и автоматически передают данные между собой при необходимости.
Чтобы получить распределенные элементы массива из пула назад к массиву в рабочей области MATLAB®, используйте gather.
создает распределенный массив из массива D = distributed(X)X.
Построение распределенного массива из локальных данных, этот путь является соответствующим, только если клиент MATLAB может сохранить полноту X в его памяти. Чтобы создать большие распределенные массивы, используйте один из методов конструктора такой как , ones(___, 'распределенный'), и т.д. Для списка, смотрите Конструктора.zeros(___, 'распределенный')
Если входной параметр уже является распределенным массивом, результат совпадает с входом.
создает распределенный массив из Составного массива D = distributed(C,dim)C, с записями C конкатенированный и распределенный по измерению dim. Если вы не используете dim, затем первая размерность является размерностью распределения.
Все записи Составного массива должны иметь тот же класс. Размерности кроме размерности распределения должны соответствовать.
Создайте небольшой массив и распределите его.
Nsmall = 50; D1 = distributed(magic(Nsmall));
Создайте большой распределенный массив непосредственно, с помощью метода сборки.
Nlarge = 1000;
D2 = rand(Nlarge,'distributed');Получите элементы распределенного массива и отметьте, где массивы расположены их Class.
D3 = gather(D2); whos
Name Size Bytes Class D1 50x50 733 distributed D2 1000x1000 733 distributed D3 1000x1000 8000000 double Nlarge 1x1 8 double Nsmall 1x1 8 double
В этом примере показано, как создать и загрузить распределенное использование массивов 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
Запустите параллельный пул рабочих и создайте Composite массив при помощи spmd.
p = parpool("local",4);Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 4).
spmd C = rand(3,labindex-1); end C
C = Lab 1: class = double, size = [3 0] Lab 2: class = double, size = [3 1] Lab 3: class = double, size = [3 2] Lab 4: class = double, size = [3 3]
Создать распределенный массив из Composite массив, используйте distributed функция. В данном примере распределите записи вдоль второго измерения.
d = distributed(C,2)
d =
0.6383 0.9730 0.2934 0.3241 0.9401 0.1897
0.5195 0.7104 0.1558 0.0078 0.3231 0.3685
0.1398 0.3614 0.3421 0.9383 0.3569 0.5250
spmd d end
Lab 1:
This worker does not store any elements of d.
Lab 2:
This worker stores d(:,1).
LocalPart: [3x1 double]
Codistributor: [1x1 codistributor1d]
Lab 3:
This worker stores d(:,2:3).
LocalPart: [3x2 double]
Codistributor: [1x1 codistributor1d]
Lab 4:
This worker stores d(:,4:6).
LocalPart: [3x3 double]
Codistributor: [1x1 codistributor1d]
Когда вы закончены с расчетами, удаляете параллельный пул.
delete(p);
Распределенный массив создается на рабочих существующего параллельного пула. Если никакой пул не существует, distributed запускает новый параллельный пул, если автоматический запуск пулов не отключен в ваших параллельных настройках. Если нет никакого параллельного пула и distributed не может запуститься один, результатом является полный массив в клиентской рабочей области.