我有一个来自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使用——当你使用parfor
、spmd
或parfeval
时。每个batch
命令都会生成一个额外的工作进程,该进程无法从并行池访问工作进程。
第一步是检查原始文档,因为2010a不再在线,所以这里有相应的2013a文档。它仍然有matlabpool解释:
"Matlabpool"--一个整数,指定除了运行批处理作业本身的工作程序之外,还要加入作业的MATLAB池的工作程序数。脚本或函数使用此池来执行批处理代码中的语句,如parfor和spmd。由于MATLAB池除了运行批处理的工作程序外,还需要N个工作程序,因此集群上必须至少有N+1个工作程序可用。您不必有一个已经运行的MATLAB池来执行批处理;并且批处理打开的新池与您可能已经打开的MATLAB池无关。(请参阅运行批处理并行循环。(默认值为0,这将导致脚本或函数仅在没有MATLAB池的单个工作线程上运行。
在当前的MATLAB版本中,此选项由池参数替代。0仍然是默认行为,您可以使用:
j1 = batch('parallel1');