Main Content

labReceive

(非推奨) spmd ブロックの別のワーカーからデータを受信する

    labReceive は推奨されません。代わりに spmdReceive を使用してください。詳細については、バージョン履歴を参照してください。

    説明

    B = labReceive は、現在の spmd ブロックまたは通信ジョブ内の任意のワーカーから送信されたデータを受信します。

    ヒント

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

    ワーカーが labReceive を実行すると、そのワーカーがデータを受信するまで他のコマンドの実行はブロックされます。

    labReceive を使用するには、numlabs1 より大きくなければなりません。

    B = labReceive(source) は、labindexsource と等しいワーカーから送信されたデータを受信します。

    B = labReceive('any') は任意のワーカーからデータを受信します。

    B = labReceive('any',tag) は、任意のワーカーからタグ tag を指定して送信されたデータを受信します。

    B = labReceive(source,tag) は、labindexsource と等しいワーカーからタグ tag を指定して送信されたデータを受信します。

    [B,source,tag] = labReceive(___) は、別のワーカーから送信されたデータを受信し、ソース ワーカーのインデックス source を返し、データと共にタグ tag を返します。

    すべて折りたたむ

    この例では、spmd ブロックまたは通信ジョブのワーカー間でデータを送信する方法を説明します。

    4 つのワーカーをもつ並列プールを作成します。既定では、spmd はプロセスベースのすべてのプールでサポートされています。

    parpool(4);

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

    spmd ブロックを作成します。labindex1 と等しいワーカー上で、配列を作成します。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
      

    入力引数

    すべて折りたたむ

    データを送信するワーカーのインデックス。正の整数スカラーとして指定します。値は、現在の spmd ブロックまたは通信ジョブを実行しているワーカーの数である、numlabs で指定された値以下でなければなりません。指定した場合、labReceive は、labindexsource と等しいワーカーから送信されたデータを返します。指定しない場合、labReceive は任意のワーカーから送信されたデータを受信します。

    例: 1

    データに付加されたタグ。0 または正の整数スカラーとして指定します。指定した場合、labReceive は、tag と等しい引数 tag を指定した labSend を使用して、現在のワーカーに送信されたデータを返します。

    例: 314159

    出力引数

    すべて折りたたむ

    データを送信するワーカーのインデックス。正の整数スカラーまたは文字ベクトル 'any' として指定します。値は、受信データを送信したワーカーの labindex と等しくなります。

    現在のワーカーで受信したデータに付加されたタグ。正の整数スカラーとして指定します。

    拡張機能

    バージョン履歴

    R2006a より前に導入

    すべて折りたたむ

    R2022b: 関数 labReceive は非推奨

    spmd ブロック内で使用するものであることがわかるように、labReceive の名前が spmdReceive に変更されました。labReceive は引き続き使用できますが、非推奨になっています。コードを更新するには、labReceive のすべてのインスタンスを spmdReceive に置き換えてください。labReceive を削除する予定はありません。