【问题标题】:Convert matlabpool to parpool in matlab在matlab中将matlabpool转换为parpool
【发布时间】:2020-08-01 10:09:59
【问题描述】:

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

【问题讨论】:

    标签: matlab parallel-processing matlabpool


    【解决方案1】:

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

    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 命令都会产生一个附加工作进程,该进程无法访问并行池中的工作进程。

    【讨论】:

    • 我实际上不确定这部分代码的作用,我想我正在并行运行一个遗传算法(每个工人 1 个不同的种群),然后 4 个不同的种群在每个一代。
    【解决方案2】:

    第一步是检查原始文档,因为 2010a 不再在线here the corresponding 2013a documentation。它仍然有 matlabpool 解释:

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

    在当前的 MATLAB 版本中,此选项为 replaced by the pool parameter。 0 仍然是默认行为,可以使用:

    j1 = batch('parallel1');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 2020-02-15
      • 2020-06-04
      相关资源
      最近更新 更多