Создайте распределенный массив из данных в клиентской рабочей области или datastore
создает распределенный массив из D
= distributed(ds
)datastore
ds
D
распределенный массив, сохраненный в частях на рабочих открытого параллельного пула.
Чтобы получить распределенные элементы массива из пула назад к массиву в рабочей области MATLAB®, используйте gather
.
создает распределенный массив из массива D
= distributed(X
)X
.
Построение распределенного массива из локальных данных, этот путь является соответствующим, только если клиент MATLAB может сохранить полноту X
в его памяти. Чтобы создать большие распределенные массивы, используйте один из методов конструктора, таких как ones
(___, 'распределенный')
, и т.д. Для списка, смотрите Конструктора.нули
(___, 'распределенный')
Если входной параметр уже является распределенным массивом, результат совпадает с входом.
создает распределенный массив из Составного массива 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
не может запуститься один, результатом является полный массив в клиентской рабочей области.