如何并行运行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);

我可以访问MATLAB中的并行计算工具箱,但我无法想到我应该做什么。我认为我必须编写另一个脚本来调用处理脚本与不同的随机种子,但我也希望不同的进程并行运行,以便我可以运行许多实验。

编辑:

我想要像

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

for循环开始进程,然后它不等待,而是继续开始下一个。

您可以使用batch来实现这一点。你可以这样做:

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

您可以稍后使用job的每个元素的load方法获取结果:

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

文档中有更多关于批处理的信息。

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

相关内容

  • 没有找到相关文章

最新更新