主要内容

spmd

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

语法

spmd语句结束

描述

例子

spmd,语句,最后定义了一个spmd声明在一行。MATLAB®执行spmd身体用语句同时在几个MATLAB工人。每个工人可以操作一个不同的数据集或者分布式数据的不同部分,并且可以与其他参与人员在执行并行计算。的spmd可以使用声明只有如果你有并行计算工具箱™。并行执行的语句,您必须首先创建一个池的MATLAB工人使用parpool或者你的平行偏好允许自动启动一个池。

体内的spmdMATLAB语句,每个工人的独特价值spmdIndex,而spmdSize表示工人执行并行块的总数。的身体内spmd声明中,通信功能(如沟通工作spmdSendspmdReceive)可以在工人之间传输数据。

从身体的一个返回值spmd语句转换为复合在MATLAB端对象。复合对象包含引用的值存储在远程MATLAB的工人,和那些可以使用单元阵列索引检索值。工人的实际数据仍可在后续的工人spmd执行,只要复合存在于客户端和并行池仍然开放。

默认情况下,MATLAB使用池中所有工人。当没有池活跃,MATLAB将创建一个池和使用所有的工人从池中。如果你的偏好不允许自动池创建,MATLAB执行本地块体并在必要时创建复合对象。你不能执行spmd如果任何工人正忙着执行一个块parfeval请求,除非你使用spmd (0)

更多信息spmd和复合对象,明白了分配数组和SPMD运行

请注意

使用parfevalOnAll而不是parforspmd如果你想使用清晰的。这保存工作区透明度。看到确保parfor-Loops或spmd语句的透明度

例子

spmd (n),语句,最后使用n指定的确切数字MATLAB工人来评估语句,前提是n工人可以从平行池。如果没有足够的工人,则抛出一个错误。如果n是零,MATLAB执行本地块体和创建复合对象,如果没有可用池一样。

例子

spmd (,n)、语句的结束使用最少的,最高n员工评估语句。如果没有足够的工人,则抛出一个错误。可以是零,这允许阻止本地运行如果没有工人。

例子

全部折叠

创建一个平行池,并执行一个简单的并行计算使用spmd。MATLAB在执行代码spmd所有工人在并行池。

parpool (3);
开始平行池(parpool)使用过程的概要文件…连接到平行池(工人数量:3)。
spmdq =魔法(spmdIndex + 2);结束

策划的结果。

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

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

删除(gcp);

如果你有几个gpu,你可以执行你的计算在多个gpu并行使用并行池。

可用来确定数量的gpu用于MATLAB、使用gpuDeviceCount函数。

availableGPUs = gpuDeviceCount (“可用”)
availableGPUs = 3

开始一个尽可能多的工人提供gpu并行池。为获得最佳性能,MATLAB分配一个不同的GPU默认每个工人。

parpool (“过程”,availableGPUs);
开始平行池(parpool)使用过程的概要文件…连接到平行池(工人数量:3)。

确定每个职工使用GPU,称之为gpuDevice在一个spmd块。的spmd块运行gpuDevice在每一个工人。

spmdgpuDevice结束

使用并行语言特性,如parforparfeval,分发计算工人并行池中。如果你使用gpuArray使计算函数,这些函数运行在GPU上的工人。有关更多信息,请参见运行在GPU MATLAB函数。例如,看到的运行在多个gpu MATLAB函数

当你完成了你的计算,关闭平行池。您可以使用gcp函数获得当前并行池。

删除(gcp (“nocreate”));

如果你想使用一个不同的gpu的选择,那么你可以使用gpuDevice选择一个特定的GPU在每个工人,利用GPU设备索引。您可以获得的指数GPU设备系统中使用gpuDeviceCount函数。

假设你有三个gpu可在您的系统,但是你想用只有两个计算。获取设备的指标。

[availableGPUs, gpuIndx] = gpuDeviceCount (“可用”)
availableGPUs = 3
gpuIndx =1×31 2 3

定义要使用的设备的指标。

useGPUs = [1 3];

开始你的平行池。使用一个spmd块和gpuDevice把每个工人和一个您想要使用gpu,使用设备索引。的spmdIndex识别每个工人的指数函数。

parpool (“过程”元素个数(useGPUs));
开始平行池(parpool)使用过程的概要文件…连接到平行池(工人数量:2)。
spmdgpuDevice (useGPUs (spmdIndex));结束

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

当你完成了你的计算,关闭平行池。

删除(gcp (“nocreate”));

提示

  • 一个spmd块并行运行在现有的工人池。如果池不存在,spmd将开始一个新的并行池,除非禁用自动启动池在你平行的偏好。如果没有游泳池和平行spmd不能一开始,连续运行的代码在客户端会话。

  • 如果AutoAttachFiles财产的集群配置文件将平行池真正的,MATLAB对一个执行一个分析spmd来确定代码块执行文件是必要的,这些文件然后自动高度平行池的工作,这样可用的代码工人。

  • 限制和限制在使用信息spmd,请参阅运行单一程序在多个数据集

  • 的性能信息spmd和其他并行编程结构,明白了选择spmd、parfor parfeval

版本历史

介绍了R2008b