添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
潇洒的猴子  ·  pyqt5 ...·  6 月前    · 
旅途中的牛腩  ·  [javaSE] ...·  2 年前    · 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

并行仿真软件模拟

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

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

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

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

parfor循环或spmd块的主体必须是透明的。透明性意味着所有对变量的引用必须在代码的文本中可见。在下面的例子中,变量X没有转移到workers。只有字符向量’X’被传递给eval,并且X在循环或块体中不作为输入变量可见。因此,MATLAB®在运行时出现错误。X = 5;parfor ii = 1:4 eval('X');endX = 5;spmd eval('X');end类似地,您不能通过在parfor或spmd语句中执行clear来清除工作空间中的变量:parf 首先创建一个并行池。 然后构造一个ParforProgMon对象: ppm = ParforProgMon(strWindowTitle, nNumIterations <, nProgressStepSize, nWidth, nHeight>); strWindowTitle是一个字符串,其中包含进度条窗口的标题。 nNumIterations是一个整数,其中包含循环中的迭代总数。 nProgressStepSize指定每次经过此步骤数时​​更新进度条。 nWidth和nHei
parfor的并行思想是把同一批数据分给for循环中不同的循环体,进行处理。spmd的思想则是不同的数据,用同一个程序处理。当然这个程序内部可以编写针对不同情况的处理代码。spmd的内部实现代码限制很少,spmd的灵活性比parfor要高得多。 spmd的使用方法如下: startmatlabpool(2) spmd a = magic(labindex )%代码
最近为了提高matlab运算速度,查阅了matlab多核运算的一些相关资料,即函数parfor。这中间遇到了一些问题,现在简单记录一下,将来有机会可以整理在一起。 参考资料先直接贴网址,方便自己查阅。 1. parfor适用情况,变量介绍。http://zhiqiang.org/coding/matlab-parfor-condition.html Loop 变量,顾名思义无需多解释。一...
https://ww2.mathworks.cn/matlabcentral/answers/46102-when-to-use-spmd-and-parfor-function 这是一个非常简短的摘要: PARFOR比SPMD使用起来简单得多,通常在尝试并行化独立计算的集合时,它通常是您的首选。您需要确保您的计算不依赖于顺序(即,它们一定不能依赖于先前计算的结果)。 SPMD较难使用,但允许使用labSend和labReceive的工作人员之间进行通信。如果您希望为分布式阵列实现新功能,这也是合.