主要内容

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

labSendReceive

(不推荐)在 spmd 代码块中的工作单元上同时发送和接收数据

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

    说明

    B = labSendReceive(destination,source,A) 将来自 spmd 代码块或通信作业中的当前工作单元的数据发送到 destination,并从 source 接收数据。数组 A 从当前工作单元发送给 labindex 等于 destination 的工作单元。当前工作单元从 labindex 等于 source 的 工作单元接收数据。

    当工作单元运行 labSendReceive(destination,source,A) 时,计算相当于工作单元运行以下代码,但发送和接收可以同时进行:

    labSend(A,destination);
    B = labReceive(source);
    

    示例

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

    示例

    全部折叠

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

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

    parpool(4);

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

    创建一个 spmd 代码块。您可以使用 modlabSendReceive 在工作单元链中发送和接收数据。使用 labSendReceive 将数据发送给 labindex 比当前工作单元索引 (mod numlabs) 高 1 的工作单元。从 labindex 比当前工作单元索引 (mod numlabs) 低 1 的工作单元接收数据。当使用模除法时,labindex 等于 1 的工作单元会从 labindex 等于 numlabs 的工作单元接收数据。labindex 等于 1 的工作单元从 labindex 等于 numlabs 的工作单元接收数据。

    spmd
        A = 2*labindex;
        
        destination = 1 + mod((labindex + 1) - 1, numlabs);
        source = 1 + mod((labindex - 1) - 1, numlabs);
        
        A = labSendReceive(source, destination, A)
    end
    Worker 1: 
      
      A =
      
           4
      
    Worker 2: 
      
      A =
      
           6
      
    Worker 3: 
      
      A =
      
           8
      
    Worker 4: 
      
      A =
      
           2
      

    输入参数

    全部折叠

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

    如果该参量为空,则该函数不会发送任何数据。

    示例: 2

    源工作单元的索引,指定为正整数标量或空数组。当前工作单元等待,直到它从源工作单元接收到数据。destination 必须小于 numlabs 给出的值,后者是运行当前 spmd 代码块或通信作业的工作单元的数量。

    如果该参量为空,则该函数不会接收任何数据。

    示例: 1

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

    示例: magic(3)

    附加到数据的标记,指定为 0 或正整数标量。当指定时,labSendReceive 从当前工作单元发送带有标记 tag 的数据,并将带有标记 tag 的数据返回给当前工作单元。

    示例: 314159

    版本历史记录

    在 R2006b 中推出

    全部折叠

    另请参阅