中使用对象和句柄parfor
循环
对象
当你运行一个parfor
-loop,你可以将广播变量或者切片的输入变量从客户端发送给worker,或者将切片的输出变量从worker发送回客户端。的保存
和负载
必须支持您发送给或从worker发送金宝app的每个对象的函数。有关详细信息,请参见对象的保存和加载过程.
中不支持将值赋给对象的分片属性或结构的分片字段金宝appparfor
循环。
无效的 | 有效的 |
---|---|
s =结构;parfori = 1:4 s.SomeField(i) = i;结束 |
parforI = 1:4 x(I) = I;结束s =结构(“SomeField”, x); |
有关一级索引约束的详细信息,请参见切变量.
处理类
可以将句柄对象作为输入发送到parfor
循环。但是,在循环迭代期间为处理工作人员上的对象所做的任何更改都不会自动传播回客户端。也就是说,循环内部所做的更改不会在循环之后自动反映出来。
为使客户端反映循环后的更改,请显式地将已修改的句柄对象分配给parfor
循环。在下面的例子中,地图
是一个切片的输入/输出变量。
地图= {containers.Map (), containers.Map (), containers.Map ()};parfori = 1:numel(maps) mymap = maps{Ii};%指定给本地拷贝的输入片为Jj = 1:1000 mymap(num2str(Jj)) = rand;结束地图{2}=关联;%修改的本地副本分配给输出片结束
切片变量引用函数句柄
不能直接用循环索引作为输入参数调用函数句柄,因为这个变量不能与分段输入变量区分开来。如果必须使用循环索引变量作为参数调用函数句柄,请使用函数宏指令
.
下面的示例使用一个函数句柄和一个为
循环。
B = @sin;为A(ii) = B(ii);结束
一个相应的parfor
-loop不允许B
引用函数句柄。作为一种解决方法,使用函数宏指令
.
B = @sin;parforA(ii) = feval(B,ii);结束