1

我有一个来自 matlab 2010a 的代码,我想在 matlab 2019a 中运行它,我正在使用并行性。

matlabpool open 4 %prepares matlab to run in 4 parallel procesors
j1 = batch('parallel1', 'matlabpool', 0);
pause(1)
j2 = batch('parallel2', 'matlabpool', 0);
pause(1)
j3 = batch('parallel3', 'matlabpool', 0);
pause(1)
j4 = batch('parallel4', 'matlabpool', 0);

matlabpool close

但是,代码在这个版本的 matlab 中不能运行,因为我必须使用 parpool。所以,我问知道如何转换或如何更改这部分代码以在我的新 matlab 版本中运行的人。

4

2 回答 2

2

您的代码的字面翻译是这样做的:

parpool(4) % Creates a parallel pool with 4 workers
j1 = batch('parallel1', 'Pool', 0) % creates a batch job with no pool
... % etc.

但是,我很好奇这是否真的是你想要做的。该parpool(4)命令启动 4 个工作进程以供您的桌面 MATLAB 使用 - 当您使用parforspmdparfeval. 每个batch命令都会产生一个额外的工作进程,该进程无法访问并行池中的工作进程。

于 2020-04-20T09:02:45.910 回答
0

第一步是检查原始文档,因为2010a不再在线,这里对应的2013a文档。它仍然有 matlabpool 解释:

'Matlabpool' - 一个整数,指定除了运行批处理作业本身的工作人员之外,要为工作添加到 MATLAB 池中的工作人员数量。脚本或函数使用此池来执行批处理代码中的语句,例如 parfor 和 spmd。由于 MATLAB 池除了需要运行批处理的工作程序外还需要 N 个工作程序,因此集群上必须至少有 N+1 个工作程序可用。您不必有一个已经运行的 MATLAB 池来执行批处理;并且批处理打开的新池与您可能已经打开的 MATLAB 池无关。(请参阅运行批处理并行循环。)默认值为 0,这会导致脚本或函数仅在没有 MATLAB 池的单个工作程序上运行。

在当前的 MATLAB 版本中,此选项由 pool 参数替换。0 仍然是默认行为,可以使用:

j1 = batch('parallel1');
于 2020-04-19T09:31:36.813 回答