我试图创建一个包含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
这一行将允许编译器包含正确的依赖项到独立的应用程序。