PARFOR
-Loops或SPMD
声明一个身体PARFOR
-loop或SPMD
块必须透明。透明度是指变量的所有引用必须在代码的文本可见。
在以下实施例中,可变X
不转移到工人。只有一个字符向量'X'
被传递到EVAL
和X
不是如在循环或块体上的输入变量是可见的。其结果是,MATLAB®问题在运行时错误。
X = 5;PARFORII = 1:4的eval('X');结束 |
X = 5;SPMD的eval('X');结束 |
同样,你不能从一个工作区通过执行清除变量明确
内PARFOR
要么SPMD
声明:
PARFORII = 1:4 <语句...>明确('X')%无法明确:违反透明度<报表...>结束 |
SPMD;明确('X');结束 |
另外,您也可以通过其值设置为空当不再需要它腾出一个变量使用的内存。
PARFORII = 1:4 <语句...>X = [];<报表...>结束
如果是SPMD
块,你可以从客户工作区清除其复合。
在一般情况下,透明性的要求限制了变量的所有动态获取,因为整个变量可能不会出现在任何给定的工人。在一个透明的工作区,你不能创建,删除,修改,访问或查询变量,如果你没有明确指定的代码,这些变量。
违反的透明度其他操作或功能的例子PARFOR
-loop包括:
透明度仅适用于的直接身体PARFOR
要么SPMD
构建,而不是从那里调用的任何功能。对于解决办法保存
和加载
是隐藏的来电保存
和加载
在函数内部。
MATLAB不成功执行EVAL
和EVALC
出现在从调用的函数语句PARFOR
身体。
您可以运行的Simuli金宝appnk®模型与并行parsim
命令,而不是使用PARFOR
-loops。有关详细信息,并在平行利用Simulink的实例,参见金宝app运行多个模拟(金宝appSIMULINK)。
如果你的Simu金宝applink模型需要访问的变量包含在。垫
文件,你必须在每个工人的工作空间加载这些参数。前必须这样做PARFOR
-loop,后开放parpool
。要做到这一点,你可以使用SPMD
要么parfevalOnAll
,在实施例中,如图所示。
SPMDevalin('基础',“负载(”“路径/到/文件”“)”)结束
parfevalOnAll(@evalin,0,'基础',“负载(”“路径/到/文件”“)”)
如果你的模型还需要在您的MATLAB脚本主体中定义的变量,你必须使用assignin
要么evalin
这些变量移动到每个工人的基工作区,在每PARFOR
迭代。