distributed

Создайте распределенный массив из данных в рабочей рабочей области клиента или datastore

Описание

пример

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, затем первая размерность является распределительной размерностью.

Все записи составного массива должны иметь один и тот же класс. Размерности, отличные от размерности распределения, должны совпадать.

Примеры

Создание распределенных массивов

Создайте небольшой массив и распределите его.

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 с помощью примера набора данных. Этот набор данных слишком мал, чтобы показать равное разбиение данных на рабочие места. Чтобы симулировать большой набор данных, искусственно увеличьте размер 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 невозможно запустить, результатом является полный массив в рабочей рабочей области клиента.

См. также

| | | | | | |