Нераспределенный по сравнению с распределенными массивами

Введение

Много встроенных типов данных и структур данных, поддержанных MATLAB, также поддерживаются в среде параллельных вычислений MATLAB. Это включает массивы любого количества размерностей, содержащих числовые, символьные, логические значения, ячейки или структуры. В дополнение к этим основным базовым блокам среда параллельных вычислений MATLAB также предлагает различные типы массивов.

Нераспределенные массивы

Когда вы создаете нераспределенный массив, MATLAB создает отдельный массив в рабочей области каждого рабочего, с помощью того же имени переменной на всех рабочих. Любая операция, выполняемая на той переменной, влияет на все отдельные массивы, присвоенные ему. Если вы отображаетесь от рабочего 1 значение, присвоенное этой переменной, все рабочие отвечают путем показа массива того имени, которое находится в их рабочей области.

Состояние нераспределенного массива зависит от значения того массива в рабочей области каждого рабочего:

Реплицированные массивы

Реплицированный массив находится в рабочих областях всех рабочих, и его размер и содержимое идентичны на всех рабочих. Когда вы создаете массив, MATLAB присваивает его той же переменной на всех рабочих. Если вы отображаете в spmd значение, присвоенное этой переменной, все рабочие отвечают путем показа того же массива.

spmd, A = magic(3), end

 WORKER 1      WORKER 2      WORKER 3      WORKER 4
           |             |             |
8   1   6  |  8   1   6  |  8   1   6  |  8   1   6
3   5   7  |  3   5   7  |  3   5   7  |  3   5   7
4   9   2  |  4   9   2  |  4   9   2  |  4   9   2

Различные массивы

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

spmd, A = magic(3) + labindex - 1, end

 WORKER 1      WORKER 2      WORKER 3      WORKER 4
           |             |             |
8   1   6  |  9   2   7  | 10   3   8  | 11   4   9
3   5   7  |  4   6   9  |  5   7   9  |  6   8  10
4   9   2  |  5  10   3  |  6  11   4  |  7  12   5

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

spmd
    B = magic(3);      %replicated on all workers
    B = B + labindex;  %now a variant array, different on each worker
end

Частные массивы

Частный массив задан на одном или нескольких, но не всех рабочих. Вы могли создать этот массив при помощи labindex в условном операторе, как показано здесь:

spmd
    if labindex >= 3, A = magic(3) + labindex - 1, end
end

 WORKER 1       WORKER 2        WORKER 3       WORKER 4
            |              |              |
  A is      |    A is      |  10   3   8  |  11   4   9
undefined   |  undefined   |   5   7   9  |   6   8  10
                           |   6  11   4  |   7  12   5

Массивы Codistributed

С реплицированными и различными массивами полное содержимое массива хранится в рабочей области каждого рабочего. Массивы Codistributed, с другой стороны, разделены в сегменты с каждым сегментом, находящимся в рабочей области различного рабочего. У каждого рабочего есть его собственный сегмент массивов, чтобы работать с. При сокращении размера массива, который должен сохранить каждый рабочий и процесс означает более эффективное использование памяти и более быструю обработку, специально для больших наборов данных.

Этот пример распределяет 3 10 реплицированный массив A через четырех рабочих. Полученный массив D находится также 3 10 в размере, но только сегмент полного массива находится на каждом рабочем.

spmd
    A = [11:20; 21:30; 31:40];
    D = codistributed(A);
    getLocalPart(D)
end

  WORKER 1       WORKER 2   WORKER 3   WORKER 4
            |              |          |
11  12  13  |  14  15  16  |  17  18  |  19  20
21  22  23  |  24  25  26  |  27  28  |  29  30
31  32  33  |  34  35  36  |  37  38  |  39  40

Для получения дополнительной информации об использовании codistributed массивы, смотрите Работу с Массивами Codistributed.