Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

spmdSendReceive

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

R2022b 以降

    説明

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

    この構文を使用すると、ワーカーで次のコード行を同時に実行してデータを送受信する計算と等価になります。

    spmdSend(A,destination);
    B = spmdReceive(source);
    

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

    すべて折りたたむ

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

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

    parpool(4);

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

    spmd ブロックを作成します。modspmdSendReceive を使用して、一連のワーカーでデータを送受信します。

    spmdSendReceive を使用して、現在の spmd ブロックを実行しているワーカーの数を法として、現在のワーカーのインデックスより 1 つ上のインデックスをもつワーカーへとデータを送信します。現在の spmd ブロックを実行しているワーカーの数を法として、現在のワーカーのインデックスより 1 つ下のインデックスをもつワーカーからデータを受信します。

    モジュロ除算を使用する場合、インデックスが 1 と等しいワーカーは、インデックスが現在の spmd ブロックを実行しているワーカーの数と等しいワーカーからデータを受信します。インデックスが 1 と等しいワーカーは、インデックスが spmdSize と等しいワーカーからデータを受信します。

    spmd
        A = 2*spmdIndex;
        
        destination = 1 + mod((spmdIndex+1)-1, spmdSize);
        source = 1 + mod((spmdIndex-1)-1, spmdSize);
        
        A = spmdSendReceive(source,destination,A)
    end
    Worker 1: 
      
      A =
      
           4
      
    Worker 2: 
      
      A =
      
           6
      
    Worker 3: 
      
      A =
      
           8
      
    Worker 4: 
      
      A =
      
           2
      

    入力引数

    すべて折りたたむ

    保存先ワーカーのインデックス。正の整数または空の配列として指定します。保存先ワーカーは現在のワーカーからデータを受信します。この入力は、現在の spmd ブロックまたは通信ジョブを実行しているワーカーの数以下でなければなりません。

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

    例: 2

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

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

    例: 1

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

    例: magic(3)

    メッセージ タグ。非負の整数として指定します。この入力を指定した場合、spmdSendReceive はタグ tag が付いたデータを現在のワーカーから送信し、タグ tag と共に送信されたデータを現在のワーカーに返します。

    例: 314159

    ヒント

    タグには次のような多くの用途があります。

    • タグを使用して、データが必要なときにのみワーカーに配列を読み込むことで、メモリを節約。

    • タグを使用して、送信側ワーカーのインデックスに依存しないコードを作成。

    拡張機能

    バージョン履歴

    R2022b で導入