主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

使用 parfor 以交互方式并行运行循环

在这个示例中,您从缓慢的 for 循环开始,然后使用 parfor 循环来加快计算速度。parforfor 循环迭代的执行拆分到并行池中的工作单元上。

MATLAB client connected to four MATLAB workers.

此示例计算矩阵的谱半径,并将 for 循环转换为 parfor 循环。了解如何测量最终的加速效果。

  1. 在 MATLAB® 编辑器中,输入以下 for 循环。添加 tictoc 来测量经过的时间。

    tic
    n = 200;
    A = 500;
    a = zeros(n);
    for i = 1:n
        a(i) = max(abs(eig(rand(A))));
    end
    toc
  2. 运行脚本并记录经过的时间。

    Elapsed time is 31.935373 seconds.

  3. 在脚本中,将 for 循环替换为 parfor 循环。

    tic
    n = 200;
    A = 500;
    a = zeros(n);
    parfor i = 1:n
        a(i) = max(abs(eig(rand(A))));
    end
    toc

  4. 运行新脚本,然后再次运行它。请注意,第一次运行比第二次运行慢,因为并行池需要一些时间来启动并使代码可供工作单元使用。记下第二次运行的经过时间。

    默认情况下,MATLAB 会自动在本地计算机上开启一个并行工作单元池。

    Starting parallel pool (parpool) using the 'Processes' profile ... connected to 4 workers.
    ...
    Elapsed time is 10.760068 seconds. 
    在四个工作单元上运行的 parfor 比相应的 for 循环运行快大约三倍。该加速比对四个工作单元进行四倍加速的理想值要小。这是由于并行开销,包括将数据从客户端传输到工作单元并返回所需的时间。此示例显示了良好的加速效果和相对较小的并行开销,并且受益于转换为 parfor 循环。并非所有的 for 循环迭代都可以转换为更快的 parfor 循环。要了解更多信息,请参阅 决定何时使用 parfor

使用 parfor 循环的一个关键要求是各个迭代必须独立。适合 parfor 处理的独立问题包括蒙特卡罗仿真和参数扫描。有关后续步骤,请参阅 将 for 循环转换为 parfor 循环

在这个示例中,您通过将 for 循环转换为四个工作单元的 parfor 循环来加快计算速度。您可以通过增加并行池中的工作单元数量来进一步减少经过的时间,请参阅 将 parfor 循环扩展到集群和云

您可以修改集群配置文件来控制运行循环的工作单元数量,以及工作单元是本地的还是在集群上。有关配置文件的更多信息,请参阅 发现集群并使用集群配置文件

修改并行设置以控制是否自动创建并行池,以及在超时之前保持可用时间的长短。有关设置的更多信息,请参阅 指定并行设置

您可以使用 parsim 命令并行运行 Simulink® 模型,而不是使用 parfor 循环。有关并行使用 Simulink 的更多信息和示例,请参阅 Running Multiple Simulations (Simulink)

另请参阅

| | |

主题