Параллельное выполнение экземпляров COM в Matlab - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь ускорить нашу тестовую среду с помощью ParralelToolbox от Mathworks. Однако я не могу запустить несколько экземпляров Matlab параллельно (до сих пор мы запускаем наши тесты последовательно, и каждый запускает новый экземпляр Matlab через сервер ActX). Поэтому, когда я запускаю следующий код ниже

ML=ver('Matlab');
ML_Path=matlabroot;
ML_Ver=ML.Version;
parfor i = 1:3
    NewMatlab = actxserver(['matlab.application.single.',ML_Ver])
    Answer = NewMatlab.Feval('test',1);
    NewMatlab.Quit;
    NewMatlab.release;
end

, экземпляры Matlab вызываются последовательно (test - это очень простой скрипт, который суммирует несколько чисел).

Однако, если я запускаю новый Matlab через командную строку

ML=ver('Matlab');
ML_Path=matlabroot;
ML_Ver=ML.Version;
parfor i = 1:3
    dos('matlab -nodesktop -minimize -wait -batch "test"');
end

это работает. Я вижу, что эти два метода совершенно различны в обработке запуска Matlab, но первый подход будет

1 Ответ

1 голос
/ 20 апреля 2020

Если вы хотите, чтобы каждая итерация вашего test выполнялась в совершенно отдельном экземпляре MATLAB, вы можете использовать функцию batch, например:

for i = 1:3
    j(i) = batch(@test, nOut, {argsIn...});
end
% Later, collect results
for i = 1:3
    wait(j(i)), fetchOutputs(j(i))
end

Или Вы можете просто использовать parfor напрямую

parpool() % If necessary
parfor i = 1:3
    out{i} = test(...)
end

(Вам нужно позвонить parpool, только если в данный момент нет открытого пула, и у вас установлены настройки, чтобы пул не создавался автоматически при ударил parfor).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...