主要内容

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

labSend

(不推荐)将数据发送到 spmd 代码块中的另一个工作单元

    不推荐使用 labSend。请改用 spmdSend。有关更新代码的信息,请参阅 版本历史记录

    说明

    labSend(A,destination) 将数据 Aspmd 代码块中的当前工作单元发送出去或者将作业传达给另一个工作单元。

    提示

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

    函数 labSend 将数据发送给 destination 指定的一个或多个工作单元。

    要使用 labSendnumlabs 必须大于 1

    示例

    labSend(___,tag) 发送带有标记 tag 的数据。当您使用 labSend 在工作单元之间发送数据时,可能有多个数据项等待被收集。当您向一个工作单元发送多个数据项时,请为每个数据项添加一个标记以区分这些数据项。

    示例

    全部折叠

    此示例显示了如何在 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
      

    输入参数

    全部折叠

    从当前工作单元发送的数据,指定为标量、向量、矩阵、多维数组、表、时间表或任何 MATLAB 变量。

    示例: magic(3)

    接收数据的工作单元的索引,指定为正整数标量或向量。该值必须小于或等于 numlabs 给出的值,即运行当前 spmd 代码块或通信作业的工作单元程序的数量。

    示例: [2 3 4]

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

    示例: 314159

    提示

    使用 labSend 发送数据的工作单元可能会在接收工作单元收到数据之前返回。当您需要在 spmd 代码块或通信作业中使用同步工作单元时,比如当您关闭共享资源时,在调用 labSendlabReceive 之后使用 labBarrier

    扩展功能

    全部展开

    版本历史记录

    在 R2006a 之前推出

    全部折叠

    另请参阅