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