Matlab: parfeval в сочетании с автономным исполняемым файлом (MCC)
Я пытаюсь создать автономный исполняемый файл matlab, содержащий операторы parfeval и панель ожидания. Следующий код отлично работает в среде исполнения 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 ответ
Очевидно, это ошибка в R2014a. Mathworks предоставил мне следующую поддержку:
Ошибка, которую вы получаете, вызвана ошибкой в Parallel Computing Toolbox. "parfeval" требует, чтобы определенные компоненты были скомпилированы в автономное приложение, но эти компоненты по умолчанию не видны для анализа зависимостей в MATLAB Compiler. Эта ошибка была исправлена в выпуске R2014b.
Чтобы обойти эту проблему в вашем текущем выпуске MATLAB, добавьте следующую строку в ваш M-файл, а затем перекомпилируйте автономное приложение, используя "mcc":
% # function parallel.internal.queue.evaluateRequest
Эта строка позволит компилятору включать правильные зависимости в автономное приложение.