在使用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.
我看着它,确实是一个不允许使用clear
中parfor
。
我的问题是为什么。v
是在每个特定工作人员内部创建的,因此不会干扰其他工作人员。
Matlab使用静态代码分析器来了解parfor循环主体如何与主工作空间交互,即哪些变量需要传递给工作人员并返回。许多功能,如eval
,evalc
,evalin
,assignin
(具有指定为工作空间参数'caller'
), load
(除非输出被分配给一个变量),save
以及clear
可以在不能由静态分析器进行预测的方式修改的工作空间。当多个工作人员在工作空间上操作时,无法确保工作空间的完整性,并且使用了此类功能。
要意识到的重要一点是,当您使用命令语法来调用函数(例如)时clear v
,参数将作为字符串文字传递,这意味着静态分析器无法理解您要清除的变量,因此没有确定命令将对工作区产生影响的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句