并行池中的工作人员彼此通信,因此您可以在这些工作人员之间分配一个数组。每个worker都包含数组的一部分,并且所有worker都知道每个worker拥有数组的哪一部分。
使用分布式
函数将数组分配给工人:
M =魔法(4)%客户端工作区中的一个4乘4的幻方毫米=分布式(M)
现在毫米
一个分布式数组,等价于米
,您可以以与任何其他数组相同的方式操作或访问它的元素。
M2 = 2 *毫米;% M2也是分布的,对工人进行计算x = M2 (1, 1)客户端的% x被设置为M2的第一个元素
单程序多数据(spmd
)构造允许您定义一个代码块,该代码块在并行池中的所有工作人员上并行运行。的spmd
块可以在池中的部分或所有工作人员上运行。
spmd%默认情况下创建池并使用所有的workerR =兰德(4);结束
这段代码创建了一个单独的4 × 4矩阵,R
,池中每个工作人员的随机数字。
后一个spmd
语句,在客户端上下文中,块中的值是可访问的,即使数据实际上存储在workers上。在客户机上,调用这些变量复合对象。组合中的每个元素都是引用池中工作对象的值(数据)的符号。注意,因为变量可能不是在每个worker上都定义的,所以Composite可能有未定义的元素。
在客户机Composite上继续使用上面的示例R
每个工人有一个元素:
X = R {3};%将X设置为worker 3的值R。
上面的行从worker 3检索数据并赋值X
.下面的代码将数据发送给worker 3:
X = X + 2;R {3} = X;%将X的值从客户端发送给worker 3。
如果并行池之间保持打开spmd
语句和相同的worker被使用,每个worker的数据从一个worker持久化spmd
声明到另一个地方。
spmdR = R + labindex%使用以前spmd中的R值。结束
的典型用途spmd
就是在多个工作人员上运行相同的代码,每个工作人员访问不同的数据集。例如:
spmd输入=负载([“somedatafile”num2str (labindex)“.mat”]);RES = somefun(输入)结束
然后是RES
在worker上可以从客户端访问为RES {1}
从工人1,RES {2}
来自工人2等。
对Composite进行索引有两种形式,可与对单元格数组进行索引相比较:
AA {n}
返回AA
从工人n
.
AA (n)
的内容的单元格数组AA
从工人n
.
尽管数据从一个工人spmd
只要并行池保持打开,数据就不会从并行池的一个实例持久化到另一个实例。也就是说,如果删除了这个池并创建了一个新的池,那么来自第一个池的所有数据都会丢失。
有关使用分布式数组的更多信息,spmd
,和复合材料,看分布式阵列.