主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

labReceive

(不推荐)从 spmd 代码块中的另一个工作单元接收数据

    不推荐使用 labReceive。请改用 spmdReceive。有关详细信息,请参阅版本历史记录

    说明

    B = labReceive 接收从当前 spmd 代码块或通信作业中的任何工作单元发送的数据。

    提示

    当您使用 parforparfeval 卸载计算时,每个计算一次仅由一个工作单元运行。这些工作单元都是独立的,彼此之间不通信。如果对这些工作单元使用 labReceive,该函数无效。

    当一个工作单元运行 labReceive 时,其他命令的执行会被阻止,直到工作单元收到数据。

    要使用 labReceivenumlabs 必须大于 1

    示例

    B = labReceive(source) 接收从 labindex 等于 source 的 工作单元发送的数据。

    B = labReceive('any') 从任意工作单元接收数据。

    B = labReceive('any',tag) 接收任意工作单元发送的带有标记 tag 的数据。

    B = labReceive(source,tag) 接收来自 labindex 等于 tag 的工作单元发送的带有标记 source 的数据。

    [B,source,tag] = labReceive(___) 接收另一个工作单元发来的数据,返回源工作单元的索引 source,并返回带有数据的标记 tag

    示例

    全部折叠

    此示例显示了如何在 spmd 代码块或通信作业中的工作单元之间发送数据。

    创建一个有 4 个工作单元的并行池。默认情况下,所有进程支持的池都支持 spmd

    parpool(4);

    当您在创建并行池后执行 spmd 代码块时,默认情况下,池中所有可用的工作单元都将运行 spmd 代码块内的代码。

    创建一个 spmd 代码块。在 labindex 等于 1 的工作单元上,创建一个数组。使用 labSend 将数组发送给 labindex 等于 2 的工作单元。

    使用 labReceive 收集数据。

    spmd
        switch labindex
            case 1
                A = magic(3)
                labSend(A,2);
            case 2
                B = labReceive
        end
    end
    Worker 1: 
      
      A =
      
           8     1     6
           3     5     7
           4     9     2
      
    Worker 2: 
      
      B =
      
           8     1     6
           3     5     7
           4     9     2
      

    输入参数

    全部折叠

    发送数据的工作单元的索引,指定为正整数标量。该值必须小于或等于 numlabs 给出的值,即运行当前 spmd 代码块或通信作业的工作单元程序的数量。当指定时,labReceive 返回从 labindex 等于 source 的工作单元发送的数据。当未指定时,labReceive 将接收从任何工作单元发送的数据。

    示例: 1

    附加到数据的标记,指定为 0 或正整数标量。当指定时,labReceive 将返回使用 labSend 发送给当前工作单元的数据,其中 tag 参量等于 tag

    示例: 314159

    输出参量

    全部折叠

    发送数据的工作单元的索引,指定为正整数标量或字符向量 'any'。该值等于发送接收数据的工作单元上的 labindex

    附加到当前工作单元接收的数据的标记,指定为正整数标量。

    扩展功能

    全部展开

    版本历史记录

    在 R2006a 之前推出

    全部折叠

    另请参阅