主要内容

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

spmdProbe

确定 spmd 代码块中的数据是否可供当前工作单元使用

自 R2022b 起

    说明

    tf = spmdProbe 测试 spmd 代码块或通信作业中的当前工作单元是否可以获得数据。如果为 1,则工作单元可以使用 spmdReceive 接收数据。

    当您使用 parforparfeval 卸载计算时,每次只有一个工作单元运行每个计算。这些工作单元都是独立的,彼此之间不通信。如果将 spmdProbe 应用于这些工作单元,该函数将不起作用。

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

    要使用 spmdProbe,运行当前 spmd 代码块的工作单元数量必须大于 1

    示例

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

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

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

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

    [tf,sourceOut,tagOut] = spmdProbe(___) 测试当前工作单元是否有数据可接收,将发送数据的工作单元的索引返回为 sourceOut,将可用数据的标记返回为 tagOut。如果有多条数据可用,spmdProbe 将返回第一个匹配消息的索引和标记。

    示例

    全部折叠

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

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

    parpool(4);

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

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

    当索引等于 1 的工作单元发送数据后,使用 spmdBarrier 来同步其他工作单元。然后使用 spmdProbe 测试数据是否可供每个工作单元接收。使用 spmdReceive 收集可用数据。

    spmd
        switch spmdIndex
            case 1
                A = magic(3);
                spmdSend(A,2);
        end
        
        spmdBarrier;
    
        tf = spmdProbe
        
        if tf
            spmdReceive;
        end
    end
    Worker 1: 
      
      tf =
      
        logical
      
         0
      
    Worker 2: 
      
      tf =
      
        logical
      
         1
      
    Worker 3: 
      
      tf =
      
        logical
      
         0
      
    Worker 4: 
      
      tf =
      
        logical
      
         0
      

    输入参数

    全部折叠

    源工作单元的索引,指定为正整数或 'any'。此输入的值必须小于或等于运行当前 spmd 代码块或通信作业的工作单元数量。

    当您将此输入指定为正整数时,如果当前工作单元可以从索引等于 source 的工作单元接收数据,则 spmdProbe 返回逻辑 1 (true)。

    当您将此输入指定为 'any' 时,如果当前工作单元可以从任何工作单元处接收数据,则 spmdProbe 返回逻辑 1 (true)。

    当您未指定此输入时,如果当前工作单元可从任何工作单元处接收数据,则 spmdProbe 返回逻辑 1 (true)。

    示例: 1

    消息标记,指定为非负整数。当您指定此输入时,如果使用标记等于 1spmdSend 发送的数据可供当前工作单元接收,则 spmdProbe 返回逻辑 true (tag)。

    示例: 314159

    输出参量

    全部折叠

    当前工作单元尚未接收的发送数据的工作单元的索引,以正整数或空数组形式返回。该值等于发送数据的工作单元的索引。

    如果没有可供接收的数据,则 sourceOut[]

    当前工作单元尚未收到的数据的消息标记,以非负整数或空数组形式返回。如果没有可供接收的数据,则 tagOut[]

    扩展功能

    全部展开

    版本历史记录

    在 R2022b 中推出