parfor
循环或spmd
语句身体parfor
循环或spmd
块必须透明的.透明性意味着所有对变量的引用必须在代码文本中可见。
在下面的示例中,变量X
不转移给工人。只有字符向量“X”
传递给eval
,X
在循环或块体中作为输入变量不可见。因此,MATLAB®在运行时发出错误。
X = 5;parforIi = 1:4 eval(“X”);结束 |
X = 5;spmdeval (“X”);结束 |
类似地,您不能通过执行从工作区中清除变量清晰的
在一个parfor
或spmd
声明:
parforIi = 1:4 <语句...>清楚(“X”)%无法清除:违反透明度<语句...>结束 |
spmd;清楚(“X”);结束 |
或者,当不再需要某个变量时,可以通过将其值设置为空来释放该变量所使用的内存。
parforIi = 1:4 <语句...>X = [];<语句...>结束
在…的情况下spmd
块,您可以从客户端工作区中清除其Composite。
一般来说,透明性的要求限制了对变量的所有动态访问,因为整个变量可能不存在于任何给定的worker中。在透明工作区中,如果没有在代码中显式地指定变量,就不能创建、删除、修改、访问或查询这些变量。
函数中违反透明性的其他操作或函数的示例parfor
循环包括:
透明度只适用于直接主体parfor
或spmd
构造,而不是从那里调用的任何函数。的解决方案保存
和负载
是隐藏呼叫保存
和负载
在一个函数。
MATLAB做成功执行eval
和evalc
对象调用的函数中出现的语句parfor
的身体。
你可以运行Simulin万博1manbetxk®模型与parsim
命令代替parfor
循环。有关并行使用Simulink的更多信息和示例,请参见万博1manbetx运行多个模拟(万博1manbetx模型)。
如果您的Simu万博1manbetxlink模型需要访问包含在.mat
文件,则必须在每个工作人员的工作空间中加载这些参数。你必须在parfor
-loop,打开后parpool
.要实现这一点,可以使用spmd
或parfevalOnAll
,如示例所示。
spmdevalin (“基地”,的负载(“路径/ /文件”))结束
parfevalOnAll (@evalin 0“基地”,的负载(“路径/ /文件”))
如果你的模型还需要在你的MATLAB脚本主体中定义的变量,你必须使用assignin
或evalin
要将这些变量移动到每个工作器的基本工作空间中parfor
迭代。