将 parfor
循环扩展到集群和云
在此示例中,您从本地多核桌面启动,并测量运行计算所需的时间,该时间与工作进程数量的增加函数。该测试称为强扩展测试。如果您添加更多工作进程,它可以使您测量计算所需时间的减少。这种依赖性被称为加速,可以让您估算代码的并行可扩展性。然后,您可以决定是否有用增加并行池中的工作进程数量以及扩展到集群和云计算。
创建函数。
edit MyCode
在 MATLAB® 编辑器中,输入新的
parfor
循环并添加tic
和toc
来测量经过的时间。function a = MyCode(A) tic parfor i = 1:200 a(i) = max(abs(eig(rand(A)))); end toc end
保存文件并关闭编辑器。
在并行 > 并行首选项菜单上,检查您的默认集群是否为进程(您的台式机器)。
在 MATLAB 命令窗口中,定义一个大小为 1 的并行池,并在一个工作进程上运行您的函数来计算经过的时间。记录单个工作进程所用的时间并关闭并行池。
parpool(1); a = MyCode(1000);
Elapsed time is 172.529228 seconds.
delete(gcp);
开启一个由两个工作进程组成的新并行池,然后再次运行该函数。
parpool(2); a = MyCode(1000);
注意经过的时间;您应该看到,与单个工作进程的情况相比,这一时间已经减少了。
尝试 4、8、12 和 16 个工作进程。通过在对数-对数刻度上绘制每个工作进程所用的时间来测量并行可扩展性。
该图显示了典型多核台式电脑的可扩展性(蓝色圆圈数据点)。强大的扩展测试表明,对于多达 8 个工作进程来说,加速几乎是线性的,并且具有显著的并行扩展性。从图中可以看出,在这种情况下,对于超过 8 个工作进程,我们无法实现进一步的加速。这个结果意味着,在本地桌面机器上,8 个工作进程的所有核心都被充分利用。根据您的硬件,您可以在本地桌面上获得不同的结果。为了进一步加快并行应用程序的速度,请考虑扩展到云或集群计算。
如果您已经用尽了本地工作进程的力量,如前面的例子一样,您可以将计算扩展到云计算。从并行 > 发现集群菜单检查您对云计算的访问。
在云中打开并行池并运行您的应用程序,而无需更改您的代码。
parpool(16); a = MyCode(1000);
注意集群工作进程数量增加所用的的时间。通过在对数-对数刻度上绘制经过时间与工作进程数量的函数来测量并行可扩展性。
该图显示了云端工作进程的典型表现(红色加数据点)。此次强大的扩展测试展示了线性加速和 100% 的并行扩展性,云端最多可达 16 个工作进程。考虑通过增加云端或计算集群上的工作进程数量来进一步扩大计算规模。请注意,对于大量工作进程和其他应用程序而言,并行可扩展性可能会有所不同,具体取决于您的硬件。
如果您可以直接访问集群,则可以使用集群上的工作进程来扩展您的计算。从并行 > 发现集群菜单检查您对集群的访问。如果您有账户,请选择集群,打开并行池并运行您的应用程序,而无需更改您的代码。
parpool(64); a = MyCode(1000);
该图显示了集群上工作进程的典型强大扩展性能(黑色 x 数据点)。观察您是否实现了 100%的并行可扩展性,集群上至少可以支持 80 个工作进程。请注意,此应用程序呈线性扩展 - 加速倍数等于所使用的工作进程数量。
此示例表明加速倍数等于工作进程数量。并非每个任务都能实现类似的加速,例如 使用 parfor 以并行方式并行运行循环。
您可能需要采用不同的方法来完成特定的任务。要了解有关替代方法的更多信息,请参阅 选择并行计算解决方案。
提示
您可以通过使用 ticBytes
和 tocBytes
测量在并行池中的工作进程之间传输的数据量来进一步配置文件 parfor
循环。有关更多信息和示例,请参阅 探查 parfor 循环。