SPMD

并行池的工人并行执行代码

句法

SPMD语句结束

描述

spmd,语句, 结束定义SPMD语句放在单行上。MATLAB®执行SPMD身体通过表示语句在几个MATLAB工作人员的同时。每个worker可以操作不同的数据集或分布式数据的不同部分,并且可以在执行并行计算时与其他参与的worker通信。该SPMD语句可以用来只有当你有并行计算工具箱™。要并行执行的语句,必须先使用MATLAB创建工人池parpool或有你的喜好平行允许池的自动启动。

里面的身体SPMD声明中,每个MATLAB工人都有独特的价值labindex,而numlabs表示并行执行块工人的总数。内的身体SPMD声明中,对通信工作的通信功能(如labSendlabReceive)可以在工人之间传输数据。

从价值观的身体返回SPMD声明转化为综合对象在MATLAB客户机上。复合对象包含对存储在远程MATLAB工作器上的值的引用,可以使用单元数组索引检索这些值。工人的实际数据在以后仍然可用SPMD执行时,只要组合存在于客户端上并且并行池保持打开状态。

默认情况下,MATLAB使用池中的所有worker。当没有活动的池时,MATLAB将创建一个池并使用该池中的所有worker。如果首选项不允许自动创建池,MATLAB将在本地执行块体并根据需要创建复合对象。你不能执行SPMD方框如果任何工人忙于执行一个parfeval请求,除非你使用SPMD(0)

有关详细信息SPMD和复合物,见分发数组并运行SPMD

注意

使用parfevalOnAll代替PARFORSPMD如果你想使用清晰的。这保留了工作区的透明度。看到确保透明度在PARFOR-循环或SPMD声明

spmd (ñ语句, 结束使用ñ指定MATLAB工人的确切人数,以评估语句,前提是ñ并行池中可以使用workers。如果没有足够的工人可用,就会抛出一个错误。如果ñ是零,MATLAB本地执行的块体,并创建复合对象,一样的,如果没有可用的游泳池。

spmd (ñ),声明,端使用最少的和最多ñ员工评估语句。如果没有足够的工人可用,就会抛出一个错误。可以是零,这使得如果无工可用块在本地运行。

例子

全部折叠

创建一个平行池,并且使用并行地执行一个简单的计算SPMD。MATLAB执行里面的代码SPMD在平行池中的所有工人。

parpool(3);
开始使用“本地”轮廓平行池(parpool)......连接到并行池(工号:3)。
SPMDq = magic(labindex + 2);结束

绘制的结果。

图次要情节(1、3、1),显示亮度图像(问{1});次要情节(1、3、2),显示亮度图像(问{2});次要情节(1、3、3),显示亮度图像(问{3});

当你与计算完成后,你可以删除当前并行池。

删除(GCP);

如果你有机会到几个GPU的,你可以使用并行库并行多GPU执行计算。

开始并行池尽可能多的工人的GPU。要确定GPU的可用数量,可使用gpuDeviceCount函数。默认情况下,MATLAB为每个worker分配一个不同的GPU以获得最佳性能。

parpool ('本地',gpuDeviceCount);

要确定每个工人正在使用哪个GPU,可以调用gpuDevice在一个SPMD块。该SPMD块运行gpuDevice在每一个工人。

SPMDgpuDevice结束

使用并行语言特性,例如PARFORparfeval,以便将计算结果分发给并行池中的工作程序。如果你使用gpuArray在你的计算启用的功能,这些功能对工人的GPU上运行。欲了解更多信息,请参阅在GPU上运行MATLAB功能。对于一个示例,请参见在多GPU上运行MATLAB功能

完成计算后,关闭并行池。你可以使用GCP函数来获取当前并行池。

删除(GCP('nocreate的'));

如果你想使用一个不同的选择GPU的,你可以使用gpuDevice选择在每个工人一个特定的GPU。定义一个阵列,例如gpuIndices,包含GPU的指数来激活每个工人。然后,开始并行池尽可能多的工人GPU来选择,并使用SPMD阻止运行gpuDevice每个工人。该labindex功能识别每个工人。使用此功能的工人与GPU指数相关联。

gpuIndices = [1 3];parpool(元素个数(gpuIndices));SPMDgpuDevice(gpuIndices(labindex));结束

作为一个最佳实践,并为最佳性能,分配一个不同的GPU给每个工人。

提示

  • 一个SPMD块运行在现有的并行池的工人。如果没有池存在,SPMD将启动一个新的并行池,除非在并行首选项中禁用了池的自动启动。如果没有平行池和SPMD无法启动,代码在客户端会话中串行运行。

  • 如果AutoAttachFiles在并行池的集群配置文件中设置为真正的, MATLAB对an进行分析SPMD块,以确定哪些代码文件所需的其执行的,那么代码是提供给工人自动附加这些文件进行并行池工作。

  • 有关约束和限制的信息时使用SPMD在多个数据集运行单个程序

介绍了在R2008b