如何多次并行运行MATLAB脚本

时间:2016-08-31 09:32:28

标签: matlab random parallel-processing matlabpool

我有一个matlab脚本(称为MyProcessing.m),它基于一些随机数进行一些计算。现在我有一个固定的种子来获得相同的随机数序列。我想多次并行运行此脚本,以利用我在系统上可用的多个核心。我希望每个新的“进程”都以不同的(但目前是固定的)种子开始。 Bellow是现在的处理文件。

脚本中有一个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);

我可以在MATLAB中访问Parallel Computing Toolbox,但我无法思考应该做些什么。我相信我必须编写另一个脚本来使用不同的随机种子调用处理脚本,但我还希望并行运行不同的进程,以便我可以运行许多实验。

编辑:

我想要像

这样的东西
for i = 1:numberOfParallelProcesses
  startANewRunOfTheScript();
end

其中for循环启动进程然后它不会等待,但它会继续启动下一个进程。

2 个答案:

答案 0 :(得分: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

有关批处理in the doc的更多信息。

答案 1 :(得分:1)

对于matlab中的Embarrassingly parallel个问题,到目前为止最简单的解决方案是启动matlab的多个实例并在每个实例上运行脚本(当你开始每个实例时,显然会在随机种子上转发)。我过去使用这种简单的技术对40核服务器产生了很大的影响。唯一的限制是您的系统内存。使用一些试验和错误来查找获得最大吞吐量所需的实例数。