Matlab: парфеваль в сочетании с автономным исполняемым файлом (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

любые подсказки?


person Joost Moesker    schedule 27.10.2015    source источник
comment
@AnderBiguri Синтаксис parfeval заключается в том, что второй входной аргумент указывает количество выходных аргументов, которые должны быть запрошены у функции, переданной в качестве первого аргумента, поэтому в этом случае вызов parfeval полностью корректен.   -  person Edric    schedule 27.10.2015
comment
Хм, я пробовал этот код в R2015b на WIN64, и у меня он работал нормально. Какой выпуск MATLAB/PCT вы используете, какую платформу и т. д.?   -  person Edric    schedule 27.10.2015
comment
Я использую R2014a на win64, очевидно, это ошибка в R2014a. Mathworks предоставил мне обходной путь. спасибо   -  person Joost Moesker    schedule 28.10.2015


Ответы (1)


По-видимому, это ошибка в R2014a. Mathworks предоставил мне следующую поддержку:

Ошибка, которую вы получаете, вызвана ошибкой в ​​Parallel Computing Toolbox. «parfeval» требует, чтобы определенные компоненты были скомпилированы в отдельное приложение, но эти компоненты по умолчанию не видны для анализа зависимостей в MATLAB Compiler. Эта ошибка была исправлена ​​в выпуске R2014b.

Чтобы обойти эту проблему в текущей версии MATLAB, добавьте следующую строку в свой M-файл, а затем перекомпилируйте автономное приложение с помощью «mcc»:

%#function parallel.internal.queue.evaluateRequest

Эта строка позволит компилятору включить правильные зависимости в отдельное приложение.

person Joost Moesker    schedule 28.10.2015