以下代码:
matlabpool('open','local',2)
parfor i=1:5
proc = System.Diagnostics.Process;
end
导致错误:
Error: MATLAB cannot determine whether "System" refers to a function or variable.
然而,当我再次执行parfor循环(错误之后)时,它会运行!我发现了几个类似的问题,但我无法实现建议的解决方案。
MATLAB parfor - cannot determine whether "ModelUtil" refers to a function or variable?
MATLAB using parfor (parallel computing toolbox) and custom packages with +
我无法理解循环第二次运行的原因。如果我再打电话
matlabpool close
再次执行整个脚本,错误再次出现。所以它只在池启动后第一次发生。有什么想法吗?
答案 0 :(得分:4)
这是因为您在parfor
循环中使用的任何变量或函数必须在解析时的代码中明确 。如果存在任何歧义,Matlab会选择抛出错误而不是通过假设搞乱。
只需定义一个匿名函数,在parfor
循环之前创建所需的对象,然后就可以在 parfor
循环中中使用它。
这在我的机器上运行正常( Matlab R2013a ):
getSystemProcess = @() System.Diagnostics.Process ;
parfor i=1:5
proc = getSystemProcess();
end
阅读本Matlab章节,了解有关如何在parfor
循环中解释变量/函数名称的更多信息:Unambiguous Variable Names