主要内容

spmd

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

语法

spmd声明终止

描述

实例

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

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

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

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

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

笔记

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

实例

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

实例

spmd(M,N)结束使用最少的M最多N工人评估声明。如果没有足够的可用工作人员,则会引发错误。M可以为零,这允许块在没有工作人员可用时在本地运行。

例子

全部崩溃

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

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

绘制结果。

图形子图(1,3,1),imagesc(q{1});子图(1,3,2),imagesc(q{2});子图(1,3,3),imagesc(q{3});

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

删除(gcp);

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

要确定可在MATLAB中使用的GPU数量,请使用gpuDeviceCount作用

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

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

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

要确定每个工作人员正在使用哪个GPU,请调用gpuDevicespmd块这个spmd分段运行gpuDevice对每一个工人。

spmdgpuDevice终止

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

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

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

如果您想使用不同的GPU选择,那么您可以使用gpuDevice要使用GPU设备索引在每个辅助设备上选择特定GPU,请使用gpuDeviceCount作用

假设您的系统中有三个可用的GPU,但您只想使用两个进行计算。获取设备的索引。

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

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

useGPUs=[13];

启动并行池。使用spmd阻止和gpuDevice使用设备索引将每个辅助进程与要使用的一个GPU关联labindex函数标识每个工作者的索引。

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

作为最佳实践,为了获得最佳性能,请为每个工作人员分配不同的GPU。

完成计算后,关闭并行池。

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

提示

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

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

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

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

在R2008b中引入