主要内容

分布阵列和运行SPMD

分布式阵列

并行池中的工作人员彼此通信,因此您可以在这些工作人员之间分配一个数组。每个worker都包含数组的一部分,并且所有worker都知道每个worker拥有数组的哪一部分。

使用分布式函数将数组分配给工人:

M =魔法(4)%客户端工作区中的一个4乘4的幻方毫米=分布式(M)

现在毫米一个分布式数组,等价于,您可以以与任何其他数组相同的方式操作或访问它的元素。

M2 = 2 *毫米;% M2也是分布的,对工人进行计算x = M2 (1, 1)客户端的% x被设置为M2的第一个元素

单程序多数据(spmd)

单程序多数据(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,和复合材料,看分布式阵列