0

我正在尝试创建一个包含 parfeval 语句和等待栏的 matlab 独立可执行文件。以下代码在 matlab 运行时中完美运行。但是,使用 mcc -m test_mcc.m 编译后,我收到以下错误:

错误:

    Error using parallel.FevalFuture/fetchNext (line 243)
The function evaluation completed with an error.

Error in test_mcc (line 11)



Caused by:
    An error occurred interpreting the results of the function evaluation.

parallel:fevalqueue:FetchNextFutureErrored

代码:

function test_mcc()
    N = 100;
    for idx = N:-1:1
        % Compute the rank of N magic squares
        F(idx) = parfeval(@rank,1,magic(idx));
    end
    % Build a waitbar to track progress
    h = waitbar(0,'Waiting for FevalFutures to complete...');
    results = zeros(1,N);
    for idx = 1:N
        [completedIdx,thisResult] = fetchNext(F);
        % store the result
        results(completedIdx) = thisResult;
        % update waitbar
        waitbar(idx/N,h,sprintf('Latest result: %d',thisResult));
    end
    delete(h)
end

任何线索?

4

1 回答 1

1

显然它是 R2014a 中的一个错误。Mathworks 为我提供了以下支持:

您收到的错误是由 Parallel Computing Toolbox 中的错误引起的。“parfeval”要求将某些组件编译到独立应用程序中,但这些组件默认情况下对 MATLAB Compiler 中的依赖关系分析不可见。此错误已在版本 R2014b 中修复。

要在您当前的 MATLAB 版本中解决此问题,请将以下行添加到您的 M 文件中,然后使用“mcc”重新编译独立应用程序:

%#function parallel.internal.queue.evaluateRequest

此行将允许编译器将正确的依赖项包含到独立应用程序中。

于 2015-10-28T14:30:20.630 回答