spmd
在并行池的工作进程上并行执行代码
语法
spmd
statements
end
说明
spmd,
在一行上定义一个 statements
, endspmd
语句。MATLAB® 在多个 MATLAB 工作进程进程上同时执行 statements
表示的 spmd
主体。每个工作进程可以对不同的数据集或分布式数据的不同部分进行操作,并且可以在执行并行计算时与其他参与的工作进程进行通信。仅当您拥有 Parallel Computing Toolbox™ 时才可使用 spmd
语句。要并行执行语句,您必须首先使用 parpool
创建 MATLAB 工作进程池,或者让您的并行选项允许自动启动池。
在 spmd
语句主体中,每个 MATLAB 工作进程都有一个唯一的值 spmdIndex
,而 spmdSize
表示并行执行该块的工作进程总数。在 spmd
语句的主体内,用于通信作业的通信函数(例如 spmdSend
和 spmdReceive
)可以在工作进程之间传输数据。
从 spmd
语句主体返回的值在 MATLAB 客户端上转换为 Composite
对象。复合对象包含对存储在远程 MATLAB 工作进程上的值的引用,并且可以使用单元格数组索引来检索这些值。只要 Composite 存在于客户端并且并行池保持打开状态,工作进程上的实际数据就会在工作进程上保持可用,以供后续的 spmd
执行。
默认情况下,MATLAB 使用池中的所有工作进程。当没有活动池时,MATLAB 将创建一个池并使用该池中的所有工作进程。如果您的偏好不允许自动创建池,MATLAB 会在本地执行块体并根据需要创建复合对象。如果任何工作进程正忙于执行 parfeval
请求,则您无法执行 spmd
代码块,除非您使用 spmd(0)
。
有关 spmd
和 Composite 对象的更多信息,请参阅 分发数组并运行 SPMD。
注意
如果要使用 clear
,请使用 parfevalOnAll
而不是 parfor
或 spmd
。这保留了工作区透明度。请参阅确保 parfor 循环或 spmd 语句的透明度。
spmd(
使用 n
), statements
, endn
来指定确切的 MATLAB 工作进程数量以评估 statements
,前提是并行池中有 n
工作进程可用。如果没有足够的可用工作进程,则会引发错误。如果 n
为零,则 MATLAB 会在本地执行块主体并创建 Composite 对象,就像没有可用池一样。
spmd(
使用最少 m
,n
), statements, endm
个工作进程和最多 n
个工作进程来评估 statements
。如果没有足够的工作进程可用,则会引发错误。m
可以为零,这允许块在没有工作进程可用的情况下在本地运行。
示例
提示
spmd
代码块在现有并行池的工作进程上运行。如果不存在池,spmd
将启动一个新的并行池,除非在您的并行选项中禁用了池的自动启动。如果没有并行池并且spmd
无法启动并行池,则代码在客户端会话中串行运行。如果并行池的集群配置文件文件中的
AutoAttachFiles
属性设置为true
,则 MATLAB 将对spmd
代码块执行分析,以确定其执行需要哪些代码文件,然后自动将这些文件附加到并行池作业,以便工作进程可以使用该代码。有关使用
spmd
时的限制和局限性的信息,请参阅 在多个数据集上运行单个程序。有关
spmd
和其他并行编程结构的性能的信息,请参阅 在 spmd、parfor 和 parfeval 之间选择。
扩展功能
版本历史记录
在 R2008b 中推出
另请参阅
batch
| Composite
| spmdReduce
| spmdIndex
| parallel.pool.Constant
| parpool
| spmdSize