非分布式阵列与分布式阵列的对比
简介
MATLAB支持的许多内置数据类型和数据结构金宝app®软件在MATLAB并行计算环境下也得金宝app到了支持。这包括包含数字、字符、逻辑值、单元格或结构的任意多个维度的数组。除了这些基本的构建模块,MATLAB的并行计算环境也提供了不同的功能类型的数组。
将数组
当您创建非分布式数组时,MATLAB会在每个worker的工作空间中构造一个单独的数组,在所有worker上使用相同的变量名。对该变量执行的任何操作都会影响分配给它的所有单独数组。如果从工作人员1显示分配给该变量的值,所有工作人员的响应都是显示驻留在其工作空间中的该名称的数组。
非分布式数组的状态取决于该数组在每个worker工作区中的值:
复制数组
一个复制数组驻留在所有工作人员的工作空间中,它的大小和内容在所有工作人员上是相同的。当您创建数组时,MATLAB将它分配给所有工作者的相同变量。如果您在spmd中显示分配给该变量的值,那么所有工作程序都将通过显示相同的数组进行响应。
spmd, A = magic(3),结束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 | 3 5 7 | 3 5 7 | 4 9 2 | 4 9 2
变体数组
一个变体数组也驻留在所有工作者的工作空间中,但其内容在一个或多个工作者中不同。当您创建数组时,MATLAB会在所有工作者上给相同的变量赋不同的值。如果您显示分配给这个变量的值,所有工作程序都会通过显示他们的数组版本来响应。
spmd, A = magic(3) + spmdIndex - 1,结束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 4 | 7 12 5
当一个复制数组的值在每个worker上都是唯一的时,它就可以变成一个变体数组。
spmd B =魔术(3);%复制在所有工人B = B + spmdIndex;%现在是一个变量数组,在每个工作端都不同
私人数组
一个私人数组定义在一个或多个工作者上,但不是所有工作者上。您可以使用spmdIndex
在条件语句中,如下所示:
spmd if spmdIndex >= 3, A = magic(3) + spmdIndex - 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数组,则被划分为段,每个段驻留在不同工作者的工作区中。每个worker都有自己的数组段。减少每个工作人员必须存储和处理的数组的大小意味着更有效地使用内存和更快的处理,特别是对于大型数据集。
这个示例分发了一个3 × 10的复制数组一个
四名工人。结果数组D的大小也是3 × 10,但每个worker上只驻留整个数组的一个片段。
spmd A = [11:20;晚上9;31:40];D =共分布(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
有关使用共分布式数组的详细信息,请参见使用共分布数组.