主要内容

非分布与分布式阵列

介绍

MATLAB支持的许多内置数据类型和数据结构万博1manbetx®在MATLAB并行计算环境中也支持软万博1manbetx件。这包括包含数字,字符,逻辑值,单元格或结构的任何数量尺寸的数组。除了这些基本的构建块外,MATLAB并行计算环境还提供不同的类型数组。

非分布阵列

当您创建一个非分布的数组时,MATLAB在每个工人的工作区中使用相同的变量名称在每个工人的工作区中构造一个单独的数组。在该变量上执行的任何操作都会影响分配给其的所有单个数组。如果您从Worker 1显示分配给该变量的值,所有工人都会通过显示位于其工作空间中的名称的数组来做出响应。

非分布数组的状态取决于每个工人工作区中该数组的值:

复制的数组

一个复制的数组居住在所有工人的工作空间中,其规模和内容在所有工人上都是相同的。创建数组时,MATLAB将其分配给所有工人的相同变量。如果在SPMD中显示分配给该变量的值,所有工人都会通过显示相同的数组来做出响应。

SPMD,A =魔术(3),End Worker 1工人2工人3工人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 =魔术(3) + LabIndex -1,End Worker 1工人2工人3工人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 =魔术(3);在所有工人中复制的%b = b + labindex;%现在是一个变体数组,每个工人端都不同

私人阵列

一个私人阵列定义在一个或多个,但不是所有工人。您可以使用Labindex在有条件的陈述中,如下所示:

SPMD如果LabIndex> = 3,A =魔术(3) + LabIndex -1,End End Worker 1工人2工人3工人4 |||A是|A是|10 3 8 |11 4 9未定义|未定义|5 7 9 |6 8 10 | 6 11 4 | 7 12 5

编码阵列

使用复制和变体数组,该数组的全部内容存储在每个工人的工作区中。编码阵列另一方面,将每个部分分为各个工人的工作空间。每个工人都有自己的阵列段可以使用。减少每个工人必须存储和过程的数组大小,这意味着更有效地利用内存和更快的处理,尤其是对于大型数据集。

此示例分布一个3 x-10复制的数组一个在四个工人中。最终的数组D的大小也为3 x-10,但只有一个完整阵列的一部分位于每个工人上。

spmd a = [11:20;21:30;31:40];d = codistribed(a);getLocalpart(D)结束工人1工人2工人3工人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

有关使用Codistribed Arrays的更多详细信息,请参见使用编码阵列