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