0

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

脚本中有一个 for 循环,但我不能使用parfor,因为每次迭代都依赖于前一次。

我的处理.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 循环在哪里启动该过程,然后它不等待,但它继续启动下一个。

4

2 回答 2

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

在 doc 中有更多关于批处理的信息。

于 2016-08-31T11:36:03.333 回答
1

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

于 2016-08-31T11:10:39.023 回答