spmd
在并行池的worker上并行执行代码
语法
spmd语句
结束
描述
spmd,
定义了一个语句
,最后spmd
语句在单行上。MATLAB®执行spmd
主体表示为语句
同时在几个MATLAB worker上。每个工作人员可以操作不同的数据集或分布式数据的不同部分,并且可以在执行并行计算时与其他参与工作人员通信。的spmd
语句只能在具有并行计算工具箱™时使用。要并行执行语句,必须首先使用parpool
或者让您的并行首选项允许自动启动池。
的内部spmd
语句中,每个MATLAB worker都有一个唯一的值spmdIndex
,而spmdSize
表示并行执行该块的工人总数。的主体内spmd
语句,用于通信作业的通信函数(例如spmdSend
而且spmdReceive
)可以在工作人员之间传输数据。
类的体返回的值spmd
语句被转换为复合
对象的MATLAB客户端。Composite对象包含对存储在远程MATLAB worker上的值的引用,这些值可以使用cell-array索引检索。关于工作者的实际数据在后续的工作者上仍然可用spmd
只要Composite在客户端上存在,并且并行池保持打开状态,就可以执行。
默认情况下,MATLAB使用池中的所有worker。当没有活动池时,MATLAB将创建一个池并使用该池中的所有worker。如果您的首选项不允许自动创建池,MATLAB将在本地执行块体,并根据需要创建Composite对象。您不能执行spmd
阻塞,如果任何工作人员正在忙着执行parfeval
请求,除非你使用spmd (0)
.
欲了解更多有关spmd
和复合对象,参见分发数组并运行SPMD.
请注意
使用parfevalOnAll
而不是parfor
或spmd
如果你想用的话清晰的
.这保持了工作空间的透明性。看到确保parfor-Loops或spmd语句的透明度.
spmd (
使用n
),语句
,最后n
来指定要计算的MATLAB worker的确切数量语句
,条件是n
并行池中有工作人员可用。如果没有足够的工作人员可用,则抛出一个错误。如果n
为零时,MATLAB在本地执行块体并创建Composite对象,就像没有可用的池一样。
spmd (
使用最少的米
,n
),语句,结束米
最大值为n
员工评估语句
.如果没有足够的工作人员可用,则抛出一个错误。米
可以为0,如果没有可用的worker,则允许块在本地运行。
例子
提示
一个
spmd
块在现有并行池的worker上运行。如果不存在存储池,spmd
将启动一个新的并行池,除非在并行首选项中禁用了池的自动启动。如果没有平行池和spmd
不能启动,代码在客户端会话中串行运行。如果
AutoAttachFiles
属性设置为真正的
, MATLAB对spmd
块来确定其执行所需的代码文件,然后自动将这些文件附加到并行池作业,以便工作线程可以使用这些代码。有关使用时的限制和限制的信息
spmd
,请参阅在多个数据集上运行单个程序.的性能信息
spmd
和其他并行编程结构,请参见选择spmd, parfor和parfeval.
版本历史
在R2008b中引入