Main Content

spmdProbe

spmd ブロックの現在のワーカーがデータを利用できるかどうかを判定する

R2022b 以降

    説明

    tf = spmdProbe は、spmd ブロックまたは通信ジョブにおける現在のワーカーがデータを利用できるかどうかをテストします。1 の場合、ワーカーは spmdReceive を使用してデータを受信できます。

    parforparfeval を使用して計算をオフロードする場合、各計算は一度に 1 つのワーカーによってのみ実行されます。これらのワーカーは独立しており、相互の通信は行われません。これらのワーカーに spmdProbe を適用する場合、この関数による影響はありません。

    データが利用可能な場合、spmdProbe は logical 1 (true) を返します。そうでない場合、spmdProbe は logical 0 (false) を返します。

    spmdProbe を使用するには、現在の spmd ブロックを実行しているワーカーの数が 1 より大きくなければなりません。

    tf = spmdProbe(source) は、現在のワーカーが受信する、インデックスが source と等しいワーカーからのデータがあるかどうかをテストします。

    tf = spmdProbe('any') は、現在のワーカーが任意のワーカーから受信する対象の、送信データがあるかどうかをテストします。

    tf = spmdProbe('any',tag) は、現在のワーカーが任意のワーカーから受信する、タグ tag 付きで送信されたデータがあるかどうかをテストします。

    tf = spmdProbe(source,tag) は、現在のワーカーが受信する、インデックスが source と等しいワーカーからタグ tag 付きで送信されたデータがあるかどうかをテストします。

    [tf,sourceOut,tagOut] = spmdProbe(___) は、現在のワーカーが受信対象とするデータがあるかどうかをテストし、データを送信しているワーカーのインデックスを sourceOut として返し、利用可能なデータのタグを tagOut として返します。データの複数の項目が利用可能な場合、spmdProbe は最初に一致するメッセージのインデックスとタグを返します。

    すべて折りたたむ

    この例では、spmd ブロックまたは通信ジョブのワーカーで受信対象となるデータがあるかどうかを判定する方法を説明します。

    4 つのワーカーをもつ並列プールを作成します。

    parpool(4);

    並列プールの作成後に spmd ブロックを実行すると、既定ではそのプール内のすべての使用可能なワーカーで、spmd ブロック内のコードが実行されます。

    spmd ブロックを作成します。インデックスが 1 と等しいワーカー上で、配列を作成します。spmdSend を使用して、インデックスが 2 と等しいワーカーに配列を送信します。

    spmdBarrier を使用して、インデックスが 1 と等しいワーカーからデータが送信された後に、ワーカーを同期します。次に、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 は logical 1 (true) を返します。

    この入力を 'any' として指定した場合、現在のワーカーが任意のワーカーから受信するデータがあれば、spmdProbe は logical 1 (true) を返します。

    この入力を指定しない場合、現在のワーカーが任意のワーカーから受信するデータがあれば、spmdProbe は logical 1 (true) を返します。

    例: 1

    メッセージ タグ。非負の整数として指定します。この入力を指定した場合、tag と等しいタグを指定した spmdSend を使用して送信された、現在のワーカーで受信されるデータがあれば、spmdProbe は logical 1 (true) を返します。

    例: 314159

    出力引数

    すべて折りたたむ

    現在のワーカーがまだ受信していないデータを送信しているワーカーのインデックス。正の整数または空の配列として返されます。値は、データを送信したワーカーのインデックスと等しくなります。

    受信される対象データがない場合、sourceOut[] です。

    現在のワーカーがまだ受信していないデータのメッセージ タグ。非負の整数または空の配列として返されます。受信される対象データがない場合、tagOut[] です。

    拡張機能

    バージョン履歴

    R2022b で導入