Matlab 并行计算之确保parfor循环或spmd语句的透明性

parfor循环或spmd块的主体必须是透明的。透明性意味着所有对变量的引用必须在代码的文本中可见。

在下面的例子中,变量X没有转移到workers。只有字符向量’X’被传递给eval,并且X在循环或块体中不作为输入变量可见。因此,MATLAB®在运行时出现错误。

X = 5;
parfor ii = 1:4
    eval('X');
end
X = 5;
spmd
    eval('X');
end

类似地,您不能通过在parfor或spmd语句中执行clear来清除工作空间中的变量:

parfor ii = 1:4
    <statements...>
    clear('X')  % cannot clear: transparency violation
    <statements...>
end
spmd; clear('X'); end

或者,可以在不再需要变量时将其值设置为空,从而释放该变量所使用的内存。

parfor ii = 1:4
    <statements...>
    X = [];
    <statements...>
end

对于spmd块,可以从客户机工作区中清除它的组合。

一般来说,透明性的要求限制了对变量的所有动态访问,因为在任何给定的worker中可能不存在整个变量。在透明工作区中,如果没有在代码中显式地指定变量,则不能创建、删除、修改、访问或查询变量。

其他违反parfor循环透明性的行为或函数的例子包括:

谁和谁

evalc、evalin和assignin与工作区参数指定为“caller”

保存并加载,除非加载的输出被分配给变量

如果一个脚本试图读取或写入父工作区的变量,那么运行这个脚本可能会导致透明性冲突。为了避免这个问题,可以将脚本转换为函数,并使用必要的变量作为输入或输出参数来调用它。

请注意

透明性只应用于parfor或spmd构造的直接体,而不应用于从那里调用的任何函数。保存和加载的解决方法是在函数中隐藏保存和加载的调用。

MATLAB确实成功地执行了出现在parfor主体中调用的函数中的eval和evalc语句。

并行仿真软件模拟

您可以使用parsim命令并行运行Simulink®模型,而不是使用parfor循环。有关并行使用Simulink的更多信息和示例,请参见运行多个模拟(Simulink)。

如果您的Simulink模型需要访问包含在.mat文件中的变量,则必须将这些参数加载到每个worker的工作空间中。您必须在parpool打开之前和之后执行此操作。要实现这一点,可以使用spmd或parfevalOnAll,如示例所示。

spmd 
    evalin('base', 'load(''path/to/file'')') 
end
parfevalOnAll(@evalin, 0, 'base', 'load(''path/to/file'')')

如果您的模型还需要在MATLAB脚本主体中定义的变量,则必须在每个parfor迭代中使用assignin或evalin将这些变量移动到每个worker的基本工作空间。

相关推荐
<p> <strong><span style="font-size:20px;color:#FF0000;">本课程主要针对计算机相关专业正在做毕设学生与需要项目实战练习Java学习者</span></strong> </p> <p> <span style="color:#FF0000;"><strong><span style="font-size:18px;">1. 包含:<span style="color:#FFFF00;background-color:#FF0000;">项目源码、</span><span style="color:#FFFF00;background-color:#FF0000;">项目文档、数据库脚本、软件工具</span>等所有资料</span></strong></span> </p> <p> <span style="color:#FF0000;"><strong><span style="font-size:18px;">2. 手把手带你从零开始部署运行本套系统</span></strong></span> </p> <p> <span style="color:#FF0000;"><strong><span style="font-size:18px;">3. 该项目附带源码资料可作为毕设使用</span></strong></span> </p> <p> <span style="color:#FF0000;"><strong><span style="font-size:18px;">4. 提供技术答疑和远程协助指导</span></strong></span><strong><span style="font-size:18px;"></span></strong> </p> <p> <br /> </p> <p> <span style="font-size:18px;"><strong>项目运行截图:</strong></span> </p> <p> <strong><span style="font-size:18px;">1)系统登陆界面</span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241015433522.png" alt="" /><br /> </span></strong> </p> <p> <strong><span style="font-size:18px;"><strong><span style="font-size:18px;">2)学生模块</span></strong></span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241015575966.png" alt="" /></span></strong> </p> <p> <strong><span style="font-size:18px;"><strong><span style="font-size:18px;">3)教师模块</span></strong></span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241016127898.png" alt="" /></span></strong> </p> <p> <strong><span style="font-size:18px;"><strong><span style="font-size:18px;">4)系统管理员</span></strong></span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241016281177.png" alt="" /></span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241016369884.png" alt="" /></span></strong> </p> <p> <strong><span style="font-size:18px;"><br /> </span></strong> </p> <p> <strong><span style="font-size:18px;"><strong><span style="font-size:18px;">更多Java毕设项目请关注我毕设系列课程 <a href="https://edu.csdn.net/lecturer/2104">https://edu.csdn.net/lecturer/2104</a></span></strong></span></strong> </p> <p> <strong><span style="font-size:18px;"><br /> </span></strong> </p>
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页