如何并行多次 运行 一个 MATLAB 脚本
How to run a MATLAB script multiple times in parallel
我有一个 matlab 脚本(称为 MyProcessing.m
),它根据一些随机数进行一些计算。现在我有一个固定的种子来获得相同的随机数序列。我想 运行 多次并行执行此脚本,以利用我在系统上可用的多个内核。我希望每个新的 "processes" 都以不同的(但暂时固定的)种子开始。下面是处理文件,因为它是现在。
脚本中有一个 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 循环启动进程,然后它不等待但继续启动下一个进程。
对于 matlab 中的 Embarrassingly parallel 问题,到目前为止,最简单的解决方案是启动多个 matlab 实例和 运行 每个实例上的脚本(显然在开始每个实例时在随机种子上向前迭代实例)。过去,我使用这种简单的技术在 40 核服务器上取得了很好的效果。唯一的限制是您的系统内存。通过一些试验和错误来找到获得最大吞吐量所需的实例数。
您可以使用 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
还有更多关于批处理的内容 in the doc。
我有一个 matlab 脚本(称为 MyProcessing.m
),它根据一些随机数进行一些计算。现在我有一个固定的种子来获得相同的随机数序列。我想 运行 多次并行执行此脚本,以利用我在系统上可用的多个内核。我希望每个新的 "processes" 都以不同的(但暂时固定的)种子开始。下面是处理文件,因为它是现在。
脚本中有一个 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 循环启动进程,然后它不等待但继续启动下一个进程。
对于 matlab 中的 Embarrassingly parallel 问题,到目前为止,最简单的解决方案是启动多个 matlab 实例和 运行 每个实例上的脚本(显然在开始每个实例时在随机种子上向前迭代实例)。过去,我使用这种简单的技术在 40 核服务器上取得了很好的效果。唯一的限制是您的系统内存。通过一些试验和错误来找到获得最大吞吐量所需的实例数。
您可以使用 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
还有更多关于批处理的内容 in the doc。