我有一个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中的并行计算工具箱,但我想不出我应该做什么。我认为我必须编写另一个脚本来调用带有不同随机种子的处理脚本,但我也希望并行运行不同的进程,这样我就可以运行许多实验。
编辑:
我想要像这样的
for i = 1:numberOfParallelProcesses
startANewRunOfTheScript();
end其中for循环启动进程,然后它不等待,但它继续启动下一个进程。
发布于 2016-08-31 11:36:03
您可以使用batch来实现这一点。你可以:
for idx = 1:n
job(idx) = batch('MyProcessing');
end然后,您可以在以后使用每个元素的load方法获取结果。
for idx = 1:n
wait(job(idx)); % wait for results to arrive
out{idx} = load(job(idx));
end还有关于批处理在医生里的更多信息。
发布于 2016-08-31 11:10:39
对于matlab中的令人尴尬的平行问题,到目前为止最简单的解决方案是启动matlab的多个实例并在每个实例上运行脚本(显然,在开始每个实例时会对随机种子转发脚本)。过去,我在40台核心服务器上使用了这个简单的技术,效果很好。唯一的限制是你的系统内存。使用少量的尝试和错误来查找获得最大吞吐量所需的实例数。
https://stackoverflow.com/questions/39245847
复制相似问题