Создание распределенного массива на основе данных в рабочей области клиента или хранилище данных
создает распределенный массив из D = distributed(ds)datastore
ds. D - распределенный массив, хранящийся в частях на работниках открытого параллельного пула. Вы работаете со всем массивом как с одной сущностью, однако работники работают только со своей частью массива и при необходимости автоматически передают данные между собой.
Чтобы извлечь распределенные элементы массива из пула обратно в массив в рабочей области MATLAB ®, используйтеgather.
создает распределенный массив из массива D = distributed(X)X.
Создание распределенного массива из локальных данных таким образом целесообразно только в том случае, если клиент MATLAB может хранить всю X в его памяти. Для построения больших распределенных массивов используйте один из методов конструктора, например: , ones(___,'distributed')и т.д. Список см. в разделе Конструктор.zeros(___,'distributed')
Если входной аргумент уже является распределенным массивом, результат совпадает с входным.
создает распределенный массив из составного массива D = distributed(C,dim)C, с записями C сцепленные и распределенные вдоль размера dim. Если опустить dim, то первое измерение является измерением распределения.
Все записи массива Composite должны иметь один и тот же класс. Измерения, отличные от измерения распределения, должны совпадать.
Создайте небольшой массив и распределите его.
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. Сначала необходимо создать хранилище данных с помощью примера набора данных. Этот набор данных слишком мал, чтобы показать равное разбиение данных на работников. Чтобы смоделировать большой набор данных, искусственно увеличьте размер хранилища данных с помощью repmat.
files = repmat({'airlinesmall.csv'}, 10, 1);
ds = tabularTextDatastore(files);
Выберите переменные примера.
ds.SelectedVariableNames = {'DepTime','DepDelay'};
ds.TreatAsMissing = 'NA';
Создание распределенной таблицы путем параллельного чтения хранилища данных. Разделите хранилище данных одним разделом на работника. Затем каждый работник считывает все данные из соответствующего раздела. Файлы должны находиться в общем расположении, доступном для работников.
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 невозможно запустить, результатом является полный массив в клиентской рабочей области.