distributed

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

Описание

пример

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

Смотрите также

| | | | | | |