主要内容

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

labProbe

(不推荐)确定 spmd 中的当前工作单元是否可以接收数据

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

    说明

    tf = labProbe 测试 spmd 代码块中的当前工作单元或通信作业是否可以使用 labReceive 接收数据。

    提示

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

    如果数据可用,labProbe 将返回逻辑 1 (true);否则,它返回逻辑 0 (false)。

    要使用 labProbenumlabs 必须大于 1

    示例

    tf = labProbe(source) 测试当前工作单元是否可以从 labindex 等于 source 的工作单元接收数据。

    tf = labProbe('any') 测试当前工作单元是否可以从任何工作单元接收发送的数据。

    tf = labProbe('any',tag) 测试当前工作单元是否可以从任何工作单元接收带有标记 tag 发送的数据。

    tf = labProbe(source,tag) 测试当前工作单元是否可以从 labindex 等于 tag 的工作单元接收带有标记 source 的数据。

    [tf,sources,tags] = labProbe(___) 测试当前工作单元是否有数据可接收,将正在发送数据的工作单元的 labindex 返回为 source,将可供接收的数据的标记返回为 tag

    示例

    全部折叠

    此示例显示如何确定是否可以在 spmd 代码块或通信作业中的工作单元上接收数据。

    创建一个有 4 个工作单元的并行池。

    parpool(4);

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

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

    使用 labBarrier 来保证在 labProbe 等于 1 的工作单元发送数据后,在工作单元上调用 labindex。然后,使用 labProbe 测试每个工作单元是否可以接收数据。使用 labReceive 收集数据。

    spmd
        switch labindex
            case 1
                A = magic(3);
                labSend(A,2);
        end
        
        labBarrier;
    
        tf = labProbe
        
        if tf
            labReceive;
        end
    end
    Worker 1: 
      
      tf =
      
        logical
      
         0
      
    Worker 2: 
      
      tf =
      
        logical
      
         1
      
    Worker 3: 
      
      tf =
      
        logical
      
         0
      
    Worker 4: 
      
      tf =
      
        logical
      
         0
      

    输入参数

    全部折叠

    源工作单元的索引,指定为正整数标量或字符向量 'any'。该值必须小于或等于 numlabs 给出的值,即运行当前 spmd 代码块或通信作业的工作单元程序的数量。当指定为正整数标量时,如果当前工作单元可以从 labProbe 等于 source 的工作单元接收数据,则 labindex 返回逻辑 1 (true)。当未指定时,如果当前工作单元可以从任何工作单元那里接收数据,则 labProbe 返回逻辑 1 (true)。

    示例: 1

    附加到数据的标记,指定为 0 或正整数标量。当指定时,如果使用 labProbe1 等于 true 发送的数据可供当前工作单元接收,则 labSend 返回逻辑 tag (tag)。

    示例: 314159

    输出参量

    全部折叠

    已发送当前工作单元尚未收到的数据的工作单元索引,指定为正整数标量或空。每个发送数据的工作单元上的值都等于 labindex。如果没有可供接收的数据,则 sources[]

    附加到由工作单元发送但当前工作单元尚未收到的数据的标记,指定为正整数标量或空。如果没有可供接收的数据,则 tags[]

    版本历史记录

    在 R2006a 之前推出

    全部折叠

    另请参阅