主要内容

spmd

在并行池的工作线程上并行执行代码

语法

spmd语句终止

描述

实例

spmd,语句终止定义一个spmd语句在一行中。MATLAB®执行spmd主体由语句在多个MATLAB工作人员上同时进行。每个worker可以操作不同的数据集或分布式数据的不同部分,并可以在执行并行计算时与其他参与的worker进行通信。的spmd语句只能在您有并行计算工具箱的情况下使用™. 要并行执行这些语句,必须首先使用帕尔普或者让您的并行首选项允许自动启动池。

体内spmd语句中,每个MATLAB工作程序都有一个唯一的值labindex虽然numlabs表示并行执行块的工人总数。体内spmd语句,用于通信作业的通信功能(例如拉布森德拉伯雷)可以在工作人员之间传输数据。

从函数体返回的值spmd语句转换为混合成的对象。Composite对象包含对存储在远程MATLAB工作者上的值的引用,可以使用单元格数组索引检索这些值。关于工人的实际数据仍可用于后续工作spmd执行,只要复合存在于客户机上并且并行池保持打开状态。

默认情况下,MATLAB使用池中的所有工作者。当没有活动池时,MATLAB将创建一个池并使用该池中的所有工作人员。如果您的首选项不允许自动创建池,MATLAB将在本地执行块体,并根据需要创建Composite对象。你不能执行spmd如果任何工作进程正忙于执行帕菲尔请求,除非你使用spmd(0)

有关spmd和复合对象,请参见分布阵列和运行SPMD

笔记

使用帕菲瓦诺酒店而不是帕弗spmd如果你想用清晰的. 这将保持工作空间的透明度。看见确保parfor循环或spmd语句的透明度

实例

spmd (N),语句终止使用N指定要评估的MATLAB工作人员的确切数量语句,条件是N可以从并行池中使用worker。如果没有足够的工作人员可用,则抛出一个错误。如果N如果为零,MATLAB将在本地执行块体并创建复合对象,这与没有可用池的情况相同。

实例

spmd (M,N)结束使用最少的M最多N员工评估语句.如果没有足够的工作人员可用,则抛出一个错误。M可以为零,这允许块在没有工作人员可用时在本地运行。

例子

全部折叠

创建一个并行池,并使用spmd. MATLAB在spmd在并行池中的所有工作人员上。

帕尔普(3);
正在使用“本地”配置文件启动并行池(parpool)。。。已连接到并行池(工作线程数:3)。
spmdQ = magic(labindex + 2);终止

绘制结果。

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

图中包含3个轴。Axes 1包含一个image类型的对象。Axes 2包含一个image类型的对象。Axes 3包含一个image类型的对象。

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

删除(gcp);

如果您可以访问多个GPU,则可以使用并行池在多个GPU上并行执行计算。

要确定MATLAB中可用的图形处理器的数量,请使用gpuDeviceCount作用

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

使用尽可能多的可用GPU启动并行池。为了获得最佳性能,默认情况下,MATLAB为每个辅助进程分配不同的GPU。

parpool (“本地”,可供选择);
正在使用“本地”配置文件启动并行池(parpool)。。。已连接到并行池(工作线程数:3)。

要确定每个工作人员使用的是哪个GPU,调用gpuDevice在一个spmd块这个spmd块运行gpuDevice在每一个工人。

spmdgpuDevice终止

使用并行语言特性,例如帕弗帕菲尔,将您的计算分发给并行池中的工作人员。如果你使用gpuArray在您的计算中启用函数,这些函数在工作程序的GPU上运行。有关详细信息,请参阅在GPU上运行MATLAB函数. 有关示例,请参见在多个GPU上运行MATLAB函数

当您完成计算时,请关闭并行池。你可以使用gcp函数获取当前并行池。

删除(gcp)(“不创造”));

如果您想使用不同的gpu选择,那么您可以使用gpuDevice使用GPU设备索引在每个worker上选择一个特定的GPU。您可以在您的系统中获取每个GPU设备的索引gpuDeviceCount作用

假设您的系统中有三个可用的gpu,但是您希望在一次计算中只使用两个。获取设备索引。

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

定义要使用的设备的索引。

useGPUs=[13];

启动并行池。使用spmd阻止和gpuDevice使用设备索引将每个worker与您想要使用的一个gpu关联起来。的labindex函数标识每个工作者的索引。

parpool (“本地”,numel(useGPUs));
正在使用“本地”配置文件启动并行池(parpool)。。。已连接到并行池(工作线程数:2)。
spmdgpuDevice (useGPUs (labindex));终止

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

当您完成计算时,请关闭并行池。

删除(gcp)(“不创造”));

提示

  • spmd块在现有并行池的工作线程上运行。如果不存在池,spmd将启动一个新的并行池,除非在并行首选项中禁用自动启动池。如果没有并行池和spmd无法启动,代码将在客户端会话中连续运行。

  • 如果自动附着文件属性设置为真正的, MATLAB对spmd块以确定其执行所需的代码文件,然后自动将这些文件附加到并行池作业,以便工作人员可以使用代码。

  • 有关使用时的限制和限制的信息spmd看见在多个数据集上运行单个程序

  • 的性能信息spmd和其他并行编程结构,请参见在spmd, parfor和parfeval之间进行选择

在R2008b中引入