在matlab中将matlabpool转换为parpool



我有一个来自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版本中运行的人。

代码的直译就是这样做的:

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命令都会生成一个额外的工作进程,该进程无法从并行池访问工作进程。

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

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

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

j1 = batch('parallel1');

相关内容

  • 没有找到相关文章