主要内容

从桌面到集群规模

这个例子展示了如何开发并行的MATLAB®代码在本地机器上和规模集群。集群提供更多的计算资源,加快和分发你的计算。您可以运行您的代码在本地机器上并行交互,然后在一个集群,在不改变代码。当你完成原型代码在本地机器上,您可以将您的计算集群使用批处理作业。所以,你可以关闭MATLAB和检索后的结果。

开发你的算法

从原型在本地机器上你的算法。示例使用整数分解样品问题。这是一个计算量问题,分解的复杂性增加的大小号。你使用一个简单的算法因式分解一个整数序列号码。

创建一个向量质数的64位的精度,和增加对质数随机获得大合数。创建一个数组来存储每个分解的结果。下面的代码在每个在这个例子可以超过20分钟,让它更快,减少工作负载通过使用更少的质数,等2 ^ 19。运行2 ^ 21看到最优最后的情节。

primeNumbers =质数(uint64 (2 ^ 21));compositeNumbers = primeNumbers。* primeNumbers (randperm(元素个数(primeNumbers)));因素= 0(元素个数(primeNumbers), 2);

使用循环因素组合数,测量时间的计算。

抽搐;idx = 1:元素个数(compositeNumbers)因素(idx:) =因素(compositeNumbers (idx));结束toc
运行时间是684.464556秒。

运行您的代码在本地平行池

并行计算工具箱™使您能够运行在多个工人扩大您的工作流,一个平行的池。在前面的迭代循环是独立的,所以您可以使用parfor循环迭代分发给多个工人。仅仅是改变你的循环到一个parfor循环。然后,运行代码并测量总计算时间。代码运行在一个平行的池没有进一步的改变,和工人们把你计算回本地工作区。因为负载分布在几个工人,降低计算时间。

抽搐;parforidx = 1:元素个数(compositeNumbers)因素(idx:) =因素(compositeNumbers (idx));结束toc
运行时间是144.550358秒。

当你使用parfor并行计算工具箱,MATLAB将自动启动一个平行的工人。平行池需要一些时间开始。这个例子展示了一个使用池已经开始运行。

默认集群配置文件“本地”。你可以检查这个概要文件被设置为默认在MATLAB选项卡,在平行>选择一个默认的集群。启用了此概要,MATLAB为平行池创建工人在您的机器上。当你使用“本地”侧面,MATLAB,默认情况下,物理核心开始尽可能多的工人在你的机器,你喜欢的工人数量。您可以使用并行控制并行行为偏好。在MATLAB选项卡上,选择平行>平行的偏好

与工人的数量来测量加速,多次运行相同的代码,限制工人的最大数量。首先,定义为每个运行工人的数量,池中工人的数量,并创建一个数组来存储每一个测试的结果。

numWorkers = [1 2 4 6];tLocal = 0(大小(numWorkers));

用一个循环遍历的最大数量的工人,并运行前面的代码。工人的数量,限制使用的第二个输入参数parfor

w = 1:元素个数(numWorkers)抽搐;parfor(idx = 1:元素个数(compositeNumbers) numWorkers (w))因素(idx:) =因素(compositeNumbers (idx));结束tLocal (w) = toc;结束

计算加速通过计算单个工人的比率计算时间和计算时间的最大数量的工人。可视化的计算规模和工人的数量,加速对工人的数量。观察到的加速增加工人的数量。然而,扩展由于开销并行并不完美。

f =图;加速= tLocal (1)。/ tLocal;情节(numWorkers加速);标题(的加速和工人的数量);包含(工人的数量);xticks (numWorkers);ylabel (“加速”);

当你完成了你的计算,删除当前并行池,这样你就可以创建一个新的集群。您可以获得与当前并行池gcp函数。

删除(gcp);

设置您的集群

如果你计算任务太大或为您的本地计算机太慢了,你可以出售你的计算集群现场或在云中。您可以运行下一个部分之前,必须获得一个集群。在MATLAB选项卡,去平行>发现集群找出如果您已经访问与MATLAB并行集群服务器™。有关更多信息,请参见发现集群

如果你没有获得一个集群,您必须配置访问之前,您可以运行下一个部分。在MATLAB中,您可以创建集群在云服务,如Amazon AWS,直接从MATLAB桌面。在选项卡,平行菜单中,选择创建和管理集群。在集群配置文件管理器,单击创建云计算集群。想要了解更多关于扩大到云,看到的开始使用云计算中心。想要了解更多关于你的选择缩放到一个集群网络,看到的开始使用MATLAB并行服务器(MATLAB并行服务器)

建立一个集群的配置文件后,可以修改它的属性平行>创建和管理集群。有关更多信息,请参见发现集群和集群配置文件使用。下面的图片显示了一个集群配置文件集群配置文件管理器:

一个集群上运行您的代码并行池

如果你想运行并行功能集群中的默认情况下,您的集群配置文件设置为默认平行>选择一个默认的集群:

您还可以使用编程方法来指定您的集群。为此,开始一个集群中的平行池通过指定集群的配置文件的名称parpool命令。在以下代码中,替换MyCluster集群的配置文件的名称。还指定数量的工人与第二个输入参数。

parpool (“MyCluster”,64);
开始平行池(parpool)使用“MyCluster”概要文件…连接到64名工人。

和之前一样,测量加速的工人多次运行相同的代码,并限制工人的最大数量。因为集群在这个例子比当地设置,允许更多的工人numWorkers可以容纳更多的价值。如果运行这段代码,parfor现在循环集群中运行。

numWorkers = [1 2 4 6 16 32 64];tCluster = 0(大小(numWorkers));w = 1:元素个数(numWorkers)抽搐;parfor(idx = 1:元素个数(compositeNumbers) numWorkers (w))因素(idx:) =因素(compositeNumbers (idx));结束tCluster (w) = toc;结束

计算加速,阴谋反对工人的数量来可视化如何计算规模和工人的数量。比较结果与本地设置。观察到的加速增加工人的数量。然而,扩展由于开销并行并不完美。

图(f);持有加速= tCluster (1)。/ tCluster;情节(numWorkers加速);标题(的加速和工人的数量);包含(工人的数量);xticks (numWorkers(2:结束));ylabel (“加速”);

当你完成了你的计算,删除当前并行池。

删除(gcp);

你的计算卸载和规模批处理

在原型和运行交互式地完成后,您可以使用批处理作业在后台将长时间运行的计算的执行批处理。计算集群中发生,你可以关闭MATLAB和检索后的结果。

使用批处理函数来提交您的集群的批处理作业。你可以将你的算法的内容在一个脚本,并使用批处理函数提交它。例如,该脚本myParallelAlgorithm执行一个简单的基准测试基于整数分解问题这个例子所示。脚本措施几个问题的计算时间复杂性与不同数量的工人。

注意,如果您使用发送一个脚本文件批处理MATLAB转移所有工作空间变量,集群,即使您的脚本不使用它们。如果你有一个大的工作空间,它影响负面数据传输时间。作为一项最佳实践,将脚本转换成一个函数文件来避免这种通信开销。这可以通过简单地添加一个函数在脚本的开始。学习如何转换myParallelAlgorithm一个函数,见myParallelAlgorithmFcn

下面的代码提交myParallelAlgorithmFcn作为批处理作业。myParallelAlgorithmFcn返回两个输出参数,numWorkers时间,你必须指定2输出输入参数的数量。因为需要一个平行的池的代码parfor循环,使用“池”名称-值对的批处理指定数量的工人。集群使用一个额外的工人来运行该函数本身。默认情况下,批处理集群中的更改当前文件夹的工人到当前文件夹的MATLAB客户机。它可以有效控制当前文件夹。例如,如果您的集群使用不同的文件系统,因此路径是不同的,比如当你从Windows客户机提交Linux集群。设置名称-值对“CurrentFolder”您所选择的文件夹,或“。”为了避免改变文件夹的工人。

totalNumberOfWorkers = 65;集群= parcluster (“MyCluster”);工作=批(集群,“myParallelAlgorithmFcn”2,“池”totalNumberOfWorkers-1,“CurrentFolder”,“。”);

监控状态的提交你的工作后,打开工作监控平行>监控工作。当集群中的计算开始,工作变动的状态运行:

你可以关闭MATLAB工作后提交。当你打开MATLAB,对你工作的工作监控跟踪,你可以如果你右键单击它,与它交互。例如,检索的工作对象,选择显示详细信息,批处理作业的输出转移到工作区,选择获取输出

另外,如果你想阻止MATLAB,直到工作完成后,使用等待工作对象的函数。

等待(工作);

从集群转移函数的输出,使用fetchOutputs函数。

输出= fetchOutputs(工作);numWorkers ={1}输出;时间=输出{2};

检索结果之后,您可以使用它们来计算你的本地机器上。计算加速,阴谋反对工人的数量。因为代码运行复杂性分解为不同的问题,你会得到一个情节为每个级别。你可以看到,对于每个问题的复杂性,加速增加的工人的数量,直到额外工人的开销大于从并行性能。当你增加问题的复杂性,你在大量工人取得更好的加速效果,因为开销并行化是不那么重要。

:图加速=时间(1)。/时间;情节(numWorkers加速);传奇(“问题复杂性1”,《问题复杂性2》,的问题复杂性3 ',“问题复杂性4”,“位置”,“西北”);标题(“加速和复杂性”);包含(工人的数量);xticks (numWorkers(2:结束));ylabel (“加速”);

另请参阅

|||

相关的例子

更多关于