主要内容

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

parfor 循环扩展到集群和云

在此示例中,您从本地多核桌面启动,并测量运行计算所需的时间,该时间与工作单元数量的增加函数。该测试称为强扩展测试。如果您添加更多工作单元,它可以使您测量计算所需时间的减少。这种依赖性被称为加速,可以让您估算代码的并行可扩展性。然后,您可以决定是否有用增加并行池中的工作单元数量以及扩展到集群和云计算。

  1. 创建函数。

    edit MyCode
    
  2. 在 MATLAB® 编辑器中,输入新的 parfor 循环并添加 tictoc 来测量经过的时间。

    function a = MyCode(A)
        tic
        parfor i = 1:200
            a(i) = max(abs(eig(rand(A))));
        end
        toc
    end
  3. 保存文件并关闭编辑器。

  4. 并行 > 并行设置菜单中,检查您的默认集群是否为进程(您的桌面计算机)。

  5. 在 MATLAB 命令行窗口中,定义一个大小为 1 的并行池,并在一个工作单元上运行您的函数来计算经过的时间。记录单个工作单元所用的时间并关闭并行池。

    parpool(1);
    a = MyCode(1000);
    Elapsed time is 172.529228 seconds.
    delete(gcp);
  6. 开启一个由两个工作单元组成的新并行池,然后再次运行该函数。

    parpool(2);
    a = MyCode(1000);

    注意经过的时间;您应该看到,与单个工作单元的情况相比,这一时间已经减少了。

  7. 尝试 4、8、12 和 16 个工作单元。通过在对数-对数刻度上绘制每个工作单元所用的时间来测量并行可扩展性。

    Plot showing the time elapsed when running the MyCode function on parallel pools with 1, 2, 4, 8, 12, and 16 workers.

    该图显示了典型多核台式电脑的可扩展性(蓝色圆圈数据点)。强扩展测试表明,对于多达 8 个工作单元来说,加速几乎是线性的,并且具有显著的并行扩展性。从图中可以看出,在这种情况下,对于超过 8 个工作单元,我们无法实现进一步的加速。这个结果意味着,在本地桌面计算机上,8 个工作单元的所有核心都被充分利用。根据您的硬件,您可以在本地桌面上获得不同的结果。为了进一步加快并行应用程序的速度,请考虑扩展到云或集群计算。

  8. 如果您已经用尽了本地工作单元的力量,如前面的示例一样,您可以将计算扩展到云计算。从并行 > 发现集群菜单检查您对云计算的访问。

    在云中打开并行池并运行您的应用程序,而无需更改您的代码。

    parpool(16);
    a = MyCode(1000);

    注意集群工作单元数量增加所用的的时间。通过在对数-对数刻度上绘制经过时间与工作单元数量的函数来测量并行可扩展性。

    Plot comparing the time elapsed when running the MyCode function on parallel pools with 1, 2, 4, 8, 12, and 16 workers when using a local machine and a cloud cluster.

    该图显示了云中工作单元的典型表现(红色加数据点)。此次强扩展测试展示了线性加速和 100% 的并行扩展性,云中最多可达 16 个工作单元。考虑通过增加云中或计算集群上的工作单元数量来进一步扩大计算规模。请注意,对于大量工作单元和其他应用程序而言,并行可扩展性可能会有所不同,具体取决于您的硬件。

  9. 如果您可以直接访问集群,则可以使用集群上的工作单元来扩展您的计算。从并行 > 发现集群菜单检查您对集群的访问。如果您有帐户,请选择集群,打开并行池并运行您的应用程序,而无需更改您的代码。

    parpool(64);
    a = MyCode(1000);

    Plot comparing the time elapsed when running the MyCode function on parallel pools with 1, 2, 4, 8, 12, and 16 workers when using a local machine, a local cluster, and a cloud cluster.

    该图显示了集群上工作单元的典型强扩展性能(黑色 x 数据点)。观察您是否实现了 100%的并行可扩展性,集群上至少可以支持 80 个工作单元。请注意,此应用程序呈线性扩展 - 加速倍数等于所使用的工作单元数量。

    此示例表明加速倍数等于工作单元数量。并非每个任务都能实现类似的加速,例如 使用 parfor 以交互方式并行运行循环

    您可能需要采用不同的方法来完成特定的任务。要了解有关替代方法的更多信息,请参阅 选择并行计算解决方案

提示

您可以通过使用 parforticBytes 测量在并行池中的工作单元之间传输的数据量来进一步配置文件 tocBytes 循环。有关更多信息和示例,请参阅 探查 parfor 循环

另请参阅

主题