主要内容

SPMD.

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

句法

SPMD.语句结尾

描述

例子

spmd,语句, 结尾定义一个SPMD.语句在一行中。马铃薯®执行SPMD.身体表示语句在多个MATLAB工作人员上同时进行。每个worker可以操作不同的数据集或分布式数据的不同部分,并可以在执行并行计算时与其他参与的worker进行通信。这SPMD.只有当您有并行计算工具箱™时,才可以使用语句。要并行执行语句,您必须首先使用Matlab Workers池使用parpool.或者有并行首选项允许自动启动池。

在身体里面SPMD.声明,每个Matlab工人都有一个独特的价值Labindex., 尽管numlabs表示并行执行块的工人总数。在身体内SPMD.声明,通信功能用于沟通作业(例如拉布德LabReceive.)可以在工作人员之间传输数据。

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

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

有关的更多信息SPMD.和复合对象,看分布阵列和运行SPMD

笔记

使用Parfevalonall.代替议案SPMD.如果你想使用清晰的.这保留了工作区透明度。看确保循环或SPMD语句中的透明度

例子

spmd (N.),语句, 结尾使用N.指定MATLAB工人的确切数量来评估语句,提供了N.可以从并行池中使用worker。如果没有足够的工作人员可用,则抛出一个错误。如果N.为零,Matlab在本地执行块体并创建复合对象,与没有可用的池相同。

例子

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

例子

全部折叠

创建一个并行池,并使用并行执行简单的计算SPMD..Matlab在内部执行代码SPMD.在并行池中的所有工人身上。

Parpool(3);
使用“本地”配置文件...连接到并行池(工人数:3)开始并行池(Parpool)。
SPMD.Q = 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 (“可用的”
可用issgpus = 3.

启动一个并行池,与众多工人为可用的GPU。为了获得最佳性能,Matlab默认为每个工人分配不同的GPU。

parpool ('当地的',可用);
使用“本地”配置文件...连接到并行池(工人数:3)开始并行池(Parpool)。

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

SPMD.gpuDevice结尾

使用并行语言特性,例如议案Parfeval.,将您的计算分发给并行池中的工作人员。如果你使用GPUArray.在计算中启用了功能,这些功能在工作者的GPU上运行。有关更多信息,请参阅在GPU上运行matlab函数.例如,看到在多个GPU上运行MATLAB功能

当您完成计算时,请关闭并行池。你可以使用GCP.获取当前并行池的功能。

删除(GCP('noicreate'));

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

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

[availableGPUs, gpuIndx] = gpuDeviceCount (“可用的”
可用issgpus = 3.
gpuindx =1×3.1 2 3

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

使用gpus = [1 3];

启动并行池。用A.SPMD.gpuDevice使用设备索引将每个worker与您想要使用的一个gpu关联起来。这Labindex.函数标识每个工人的索引。

parpool ('当地的',numel(usegpus));
使用“本地”配置文件启动并行池(Parpool)连接到并行池(工人数量:2)。
SPMD.gpuDevice (useGPUs (labindex));结尾

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

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

删除(GCP('noicreate'));

提示

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

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

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

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

在R2008B中介绍