Как запустить скрипт 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-ядерном сервере. Единственным ограничением является ваша системная память. Используйте небольшое количество проб и ошибок, чтобы найти количество экземпляров, необходимое для получения максимальной пропускной способности.