Matlab:与独立可执行文件(MCC)相结合的parfeval



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

错误:

    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

什么线索吗?

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

您收到的错误是由并行程序中的错误引起的计算工具箱。"parfeval"要求某些组件是编译成独立的应用程序,但这些组件由默认是不可见的依赖分析在MATLAB编译器。该错误已在R2014b版本中修复。

要在当前的MATLAB版本中解决此问题,请添加到m文件中,然后重新编译独立版本应用程序使用"mcc":

% #函数parallel.internal.queue.evaluateRequest

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

相关内容

  • 没有找到相关文章

最新更新