【问题标题】:MATLAB parfor error: function or variable?MATLAB parfor 错误:函数还是变量?
【发布时间】:2015-03-11 07:24:32
【问题描述】:

以下代码:

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

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

【问题讨论】:

    标签: matlab parallel-processing


    【解决方案1】:

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

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

    这在我的机器上运行良好(Matlab R2013a):

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

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

    【讨论】:

    • 根据您的建议,我不再收到错误消息,而是出现了两个警告:Warning: Objects of class 'parallel.cluster.Local' cannot be saved to MAT files.Warning: Objects of class 'parallel.cluster.Local' cannot be loaded correctly from MAT files. 虽然行为相当混乱,但有时它运行时也没有任何警告。我发现如果我在函数中执行 parfor 循环而不是在脚本中执行(或选择行并按 F9)会有所不同。请问有什么想法吗?我也在使用 R2013a。
    • 这似乎是一个完全不同的问题。您正在尝试将某些对象 (parallel.cluster.Local) 保存在 .mat 文件中,Matlab 警告您它可能无法正常工作。我建议您发布一个包含代码详细信息的新问题。不要忘记详细说明您在函数模式和脚本模式下运行时观察到的区别。
    • 今天从一个清晰的工作区开始,我无法再重现警告。我没有保存任何东西,只是运行上面的最小示例。让我希望这只是一些异常情况。 Shuold它再次出现,我将发布一个新问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    相关资源
    最近更新 更多