Main Content

labSendReceive

(非推奨) spmd ブロックの 1 つのワーカーでデータの送受信を同時に行う

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

    説明

    B = labSendReceive(destination,source,A) は、spmd ブロックまたは通信ジョブの現在のワーカーからデータを destination に送信し、source からデータを受信します。配列 A は、現在のワーカーから、labindexdestination と等しいワーカーへと送信されます。現在のワーカーは、labindexsource と等しいワーカーからデータを受信します。

    ワーカーが labSendReceive(destination,source,A) を実行すると、ワーカーで次のコードを実行する計算と等価になりますが、送信と受信を同時に実施できます。

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

    B = labSendReceive(___,tag) は、タグ tag が付いたデータを送受信します。labSendReceive を使用してワーカー間でデータを送信する場合、データの複数の項目が収集されるのを待機することができます。データの複数の項目をワーカーに送信する場合、各項目にタグを付加して項目間の区別をつけます。

    すべて折りたたむ

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

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

    parpool(4);

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

    spmd ブロックを作成します。modlabSendReceive を使用して、一連のワーカーでデータを送受信できます。labSendReceive を使用して、現在のワーカーのインデックス mod numlabs より 1 つ上の labindex をもつワーカーへとデータを送信します。現在のワーカーのインデックス mod numlabs より 1 つ下の labindex をもつワーカーからデータを受信します。モジュロ除算を使用する場合、labindex1 と等しいワーカーは、labindexnumlabs と等しいワーカーから受信します。labindex1 と等しいワーカーは、labindexnumlabs と等しいワーカーから受信します。

    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 は、現在の spmd ブロックまたは通信ジョブを実行しているワーカーの数である、numlabs で指定された値以下でなければなりません。

    この引数が空である場合、関数はデータを送信しません。

    例: 2

    ソース ワーカーのインデックス。正の整数スカラーまたは空の配列として指定します。現在のワーカーはソース ワーカーからデータを受信するまで待機します。destination は、現在の spmd ブロックまたは通信ジョブを実行しているワーカーの数である、numlabs で指定された値より小さくなくてはなりません。

    この引数が空である場合、関数はデータを受信しません。

    例: 1

    現在のワーカーから送信するデータ。スカラー、ベクトル、行列、多次元配列、table、または timetable として指定します。

    例: magic(3)

    データに付加されたタグ。0 または正の整数スカラーとして指定します。指定した場合、labSendReceive はタグ tag が付いたデータを現在のワーカーから送信し、タグ tag と共に送信されたデータを現在のワーカーに返します。

    例: 314159

    バージョン履歴

    R2006b で導入

    すべて折りたたむ

    R2022b: 関数 labSendReceive は非推奨

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