文档

确保透明度parfor循环

身体parfor循环或spmdBlock必须为透明的.透明度意味着对变量的所有引用必须在代码文本中可见。

在下面的例子中,变量X不转移到工人身上。只有字符向量“X”传递给eval,X在循环或块体中不可见作为输入变量。因此,MATLAB®在运行时发出错误。

X = 5;parforIi = 1:4 eval(“X”);结束
X = 5;spmdeval (“X”);结束

同样,不能通过执行来清除工作区中的变量清晰的在一个parforspmd声明:

parforIi = 1:4 <语句>清楚(“X”)%无法清除:违反透明度<语句>结束
spmd;清楚(“X”);结束

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

parforIi = 1:4 <语句>X = [];<语句>结束

在这种情况下spmd块,您可以清除它的复合从客户工作空间。

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

类中违反透明性的其他操作或函数的示例parfor循环包括:

  • 而且

  • evalcevalin,assignin工作空间参数指定为“来电”

  • 保存而且负载,除非输出负载赋值给一个变量

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

请注意

透明只适用于的直接主体parforspmd构造,而不是从那里调用的任何函数。解决方案保存而且负载是把电话藏起来吗保存而且负载在函数内部。

MATLAB成功执行eval而且evalc类调用的函数中出现的语句parfor的身体。

平行万博1manbetx模拟

你可以运行Simulin万博1manbetxk®模型与之并行parsim命令,而不是使用parfor循环。有关并行使用Simulink的更多信息和示例,请参见万博1manbetx运行多个模拟(万博1manbetx模型)。

  • 如果您的Simu万博1manbetxlink模型需要访问控件中包含的变量.mat文件中,您必须在每个工作空间中加载这些参数。你必须在parfor-loop,打开后parpool.要实现这一点,您可以使用spmdparfevalOnAll,如示例所示。

    spmdevalin (“基地”的负载(“路径/ /文件”))结束
    parfevalOnAll (@evalin 0“基地”的负载(“路径/ /文件”))

  • 如果您的模型还需要在MATLAB脚本正文中定义的变量,则必须使用assigninevalin要将这些变量移动到每个工作者的基本工作空间,在每个parfor迭代。

另请参阅

|

相关的话题

这个话题有用吗?