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