Как запустить скрипт MATLAB несколько раз параллельно

У меня есть скрипт Matlab MyProcessing.m), который делает некоторые вычисления на основе некоторого случайного числа. Прямо сейчас у меня есть фиксированное начальное число, чтобы получить ту же последовательность случайных чисел. Я хотел бы запустить этот скрипт несколько раз параллельно, чтобы использовать несколько ядер, которые у меня есть в системе. Я хочу, чтобы каждый из новых "процессов" начинался с другого (но на данный момент фиксированного) семени. Ниже приведен файл обработки, как сейчас.

Внутри скрипта есть цикл for, но я не могу использовать parfor потому что каждая итерация зависит от предыдущей.

MyProcessing.m

rng(1);
A = rand(5,5);
x =[];
y = []

% for loop
%   that updates x and y when necessary
% end for

figure(1);
scatter(x, y);
savefig(filename);

У меня есть доступ к Parallel Computing Toolbox в MATLAB, но я не могу думать о том, что мне делать. Я считаю, что мне нужно написать другой сценарий для вызова сценария обработки с другим случайным начальным числом, но я хочу, чтобы разные процессы выполнялись параллельно, чтобы я мог проводить много экспериментов.

РЕДАКТИРОВАТЬ:

Я хочу что-то вроде

for i = 1:numberOfParallelProcesses
  startANewRunOfTheScript();
end

где цикл for запускает процесс и затем не ждет, но продолжает запускать следующий.

2 ответа

Решение

Вы могли бы использовать batch для достижения этой цели. Ты можешь сделать:

for idx = 1:n
  job(idx) = batch('MyProcessing');
end

Вы можете получить результаты позже, используя load метод каждого элемента job:

for idx = 1:n
  wait(job(idx)); % wait for results to arrive
  out{idx} = load(job(idx));
end

Есть больше о пакетной обработке в документе.

Для смущающе параллельных задач в matlab, безусловно, самое простое решение - запускать несколько экземпляров matlab и запускать скрипт в каждом экземпляре (очевидно, это приводит к переходу на случайное начальное число при запуске каждого экземпляра). В прошлом я использовал эту простую технику для большого эффекта на 40-ядерном сервере. Единственным ограничением является ваша системная память. Используйте небольшое количество проб и ошибок, чтобы найти количество экземпляров, необходимое для получения максимальной пропускной способности.

Другие вопросы по тегам