distributed

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

Описание

пример

D = distributed(ds) создает распределенный массив из a datastore dsD распределенный массив, сохраненный в частях на рабочих открытого параллельного пула. Вы работаете с целым массивом как одна сущность; однако, рабочие действуют только с их стороны массива и автоматически передают данные между собой при необходимости.

Получать распределенные элементы массива из пула назад к массиву в MATLAB® рабочая область, используйте gather.

пример

D = distributed(X) создает распределенный массив из массива X.

Построение распределенного массива из локальных данных, этот путь является соответствующим, только если клиент MATLAB может сохранить полноту X в его памяти. Чтобы создать большие распределенные массивы, используйте предыдущий синтаксис, чтобы создать distributed массив от datastore, или используйте одну из функций создания массивов такой как ones(___, "распределенный"), zeros(___, "распределенный"), и т.д. Для списка функций, которые могут создать distributed массивы непосредственно, смотрите distributed.

Если входной параметр уже является распределенным массивом, результат совпадает с входом.

пример

D = distributed(C,dim) создает распределенный массив из Composite массив C, с записями C конкатенированный и распределенный по измерению dim. Если вы не используете dim, затем первая размерность является размерностью распределения.

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

Примеры

свернуть все

В этом примере показано, как создать и получить распределенные массивы.

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

Nsmall = 50;
D1 = distributed(magic(Nsmall));
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.

Создайте большой распределенный массив непосредственно, с помощью метода сборки.

Nlarge = 1000;
D2 = rand(Nlarge,"distributed");

Получите элементы распределенного массива назад к локальной рабочей области. Можно использовать whos определить, где данные в рабочей области расположены путем исследования Class переменная.

D3 = gather(D2);
whos
Name           Size                Bytes  Class                      Attributes

  D1            50x50                20000  distributed                          
  D2          1000x1000            8000000  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 =
 
   Worker 1: class = double, size = [3  0]
   Worker 2: class = double, size = [3  1]
   Worker 3: class = double, size = [3  2]
   Worker 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
Worker 1: 
  
  This worker does not store any elements of d.
  
Worker 2: 
  
  This worker stores d(:,1).
  
          LocalPart: [3x1 double]
      Codistributor: [1x1 codistributor1d]
  
Worker 3: 
  
  This worker stores d(:,2:3).
  
          LocalPart: [3x2 double]
      Codistributor: [1x1 codistributor1d]
  
Worker 4: 
  
  This worker stores d(:,4:6).
  
          LocalPart: [3x3 double]
      Codistributor: [1x1 codistributor1d]
  

Когда вы закончены с расчетами, удаляете параллельный пул.

delete(p);

Входные параметры

свернуть все

Datastore для набора данных в виде одного из следующего:

Ввод Вывод
Текстовые файлыTabularTextDatastore
Файлы изображенийImageDatastore
Файлы электронной таблицыSpreadsheetDatastore
MAT-файлы или файлы Последовательности производятся mapreduceKeyValueDatastore
Пользовательские файлы форматаFileDatastore
MAT-файлы или файлы Последовательности, произведенные write функция tall тип данных. TallDatastore
Файлы ParquetParquetDatastore
База данныхDatabaseDatastore (Database Toolbox)

Массив, чтобы распределить в виде массива.

Составной массив, чтобы распределить в виде Composite массив.

Размерность распределения в виде скалярного целого числа. Размерность распределения задает размерность, по которой вы хотите распределить Composite массив.

Выходные аргументы

свернуть все

Распределенный массив, сохраненный в частях на рабочих открытого параллельного пула, возвращенного как распределенный массив.

Советы

  • Распределенный массив создается на рабочих существующего параллельного пула. Если никакой пул не существует, distributed запускает новый параллельный пул, если автоматический запуск пулов не отключен в ваших параллельных настройках. Если нет никакого параллельного пула и distributed не может запуститься один, MATLAB возвращает результат как нераспределенный массив в клиентской рабочей области.

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

| | | | | | |

Введенный в R2008a