我有一个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循环启动进程然后它不会等待,但它会继续启动下一个进程。
答案 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核服务器产生了很大的影响。唯一的限制是您的系统内存。使用一些试验和错误来查找获得最大吞吐量所需的实例数。