文档

使用组合访问辅助变量

复合材料简介

MATLAB中的复合对象®客户端会话允许您直接访问工作人员的数据值。大多数情况下,你在内部分配这些变量spmd声明。在显示和使用方面,复合材料类似于细胞阵列。创建复合材料有两种方法:

  • 使用混合成的客户端上的函数。分配给复合元素的值存储在辅助元素上。

  • 在工作区内的工作区上定义变量spmd陈述之后spmd语句,则存储的值在客户端上可以作为组合进行访问。

在spmd语句中创建复合语句

类中的变量定义或赋值时spmd语句时,数据值存储在workers上。

之后spmd语句,则这些数据值在客户端上可以作为组合进行访问。复合对象类似于单元阵列,其行为也类似。在客户机上,一个复合对象每个worker有一个元素。例如,假设您创建了一个由三个本地工作者组成的并行池,并运行spmd关于该池的声明:

帕尔普(“本地”3)spmd%使用所有3个工人毫米=魔法(labindex + 2);%MM是每个工人的一个变量终止MM{1}%在客户机中,MM是一个组合,每个worker有一个元素
8 1 6 3 5 7 4 9 2
MM{2}
16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

可能不会在每个辅助进程上定义变量。对于未定义变量的辅助对象,相应的复合元素没有值。尝试读取该元素会引发错误。

spmd如果labindex > 1 HH = rand(4);终止终止
实验一:无数据实验二:类=双精度,大小=[4]实验三:类=双精度,大小=[4]

您还可以从客户端设置Composite元素的值。这将导致数据的传输,并将值存储在适当的worker上,即使它没有在spmd声明:

MM{3}=眼睛(4);

在这种情况下,,毫米必须已经以复合形式存在,否则MATLAB将其解释为单元数组。

当你输入spmd语句,变量的值毫米在辅助工3上设置如下:

spmd如果labindex==3,毫米,终止终止
实验3:MM = 1 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 1

当您使用复合元素在客户端工作区中显式分配变量时,数据从工作者传输到客户端:

M=MM{1}%将数据从worker 1传输到客户端上的变量M
8 1 6 3 5 7 4 9 2

将整个复合赋值给另一个复合不会导致数据传输。相反,客户端只是复制Composite作为存储在工作人员上的适当数据的引用:

NN =毫米%设置整个合成等于另一个,不转移

但是,访问组合的元素以将值指定给其他组合导致数据从工作者传输到客户机,即使任务随后转移到同一工作者。在这种情况下,,神经网络必须已作为组合存在:

NN{1}=MM{1}%传输数据到客户端,然后到工作人员

完成后,您可以删除池:

删除(gcp)

spmd的变量持久性与序列

存储在辅助对象上的值保留在spmd声明。这允许您使用多个spmd语句,并继续使用前面定义的相同变量spmd块。

这些值将保留在辅助对象上,直到在客户端上清除相应的组合,或者直到删除并行池。以下示例说明了数据值的使用寿命spmd使用四名工人组成的水池:

帕尔普(“本地”4)spmdAA=labindex;%初始设置终止AA(:)%复合材料
[1] [2] [3] [4]
spmdAA=AA*2;将现有值相乘终止AA(:)%复合材料
[2] [4] [6] [8]
清晰的AA%在客户端清除也清除工人spmdAA=AA*2;终止%产生错误删除(gcp)

在spmd语句之外创建复合语句

这个混合成的函数创建复合对象而不使用spmd陈述这对于在调用之前预先填充worker上的变量值可能很有用spmd语句开始对这些工人执行。假设并行池已在运行:

PP=复合材料()

默认情况下,这将为并行池中的每个辅助进程创建一个包含一个元素的组合。您还可以仅在池中的辅助对象子集上创建复合对象。有关更多详细信息,请参阅复合参考页。组合的元素现在可以像往常一样在客户端上设置,也可以在spmd陈述设置组合元素时,数据会立即传输到相应的辅助对象:

对于ii=1:numel(PP)PP{ii}=ii;终止
这个话题有用吗?