MATLAB parfor错误:函数还是变量?

时间:2015-01-13 10:53:27

标签: matlab parallel-processing

以下代码:

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

再次执行整个脚本,错误再次出现。所以它只在池启动后第一次发生。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

这是因为您在parfor循环中使用的任何变量或函数必须在解析时的代码中明确 。如果存在任何歧义,Matlab会选择抛出错误而不是通过假设搞乱。

只需定义一个匿名函数,在parfor循环之前创建所需的对象,然后就可以在 parfor循环中中使用它。

这在我的机器上运行正常( Matlab R2013a ):

getSystemProcess = @() System.Diagnostics.Process ;
parfor i=1:5
    proc = getSystemProcess();
end

阅读本Matlab章节,了解有关如何在parfor循环中解释变量/函数名称的更多信息:Unambiguous Variable Names