为什么Matlab明确违反了透明度?

时间:2016-04-19 15:29:53

标签: matlab parallel-processing worker

在使用Matlab parfor时,我遇到了以下行为

parpool(2)
parfor j=1:100
    v = j+1;
    clear v
end
> Error in ==> parallel_function>make_general_channel/channel_general at 886
> Transparency violation error.

looked into it,确实不允许在clear内使用parfor

我的问题就是为什么。 v是在每个特定工作者中创建的,因此不会干扰其他工作人员。

1 个答案:

答案 0 :(得分:2)

Matlab使用静态代码分析器来了解parfor循环体如何与主工作区交互,即哪些变量需要传递给工人和返回。许多函数,例如evalevalcevalinassignin(工作空间参数指定为'caller'),load(除非将输出分配给变量),saveclear可以以静态分析器无法预测的方式修改工作空间。当多个工作人员在其上操作时,无法确保工作空间的完整性,并且使用了这些功能。

要实现的重要一点是,当您使用命令语法来调用函数时,例如clear vthe argument is passed as a string literal,这意味着静态分析器无法理解您正在尝试哪个变量清除,因此无法确定命令对工作区的影响。

根据建议in documentation,释放parfor中变量使用的大部分内存的解决方法是:v = [];