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

时间:2015-10-27 11:59:24

标签: matlab mcc

我试图创建一个包含parfeval语句和waitbar的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

任何线索?

1 个答案:

答案 0 :(得分:1)

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

  

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

     

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

     

%#function parallel.internal.queue.evaluateRequest

     

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