Main Content

labSend

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

    labSend は推奨されません。代わりに spmdSend を使用してください。コードの更新の詳細については、バージョン履歴を参照してください。

    説明

    labSend(A,destination) は、spmd ブロックまたは通信ジョブの現在のワーカーからデータ A を送信します。

    ヒント

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

    関数 labSend は、destination によって指定されたワーカーにデータを送信します。

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

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

    すべて折りたたむ

    この例では、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
      

    入力引数

    すべて折りたたむ

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

    例: magic(3)

    データを受信するワーカーのインデックス。正の整数スカラーまたはベクトルとして指定します。値は、現在の spmd ブロックまたは通信ジョブを実行しているワーカーの数である、numlabs で指定された値以下でなければなりません。

    例: [2 3 4]

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

    例: 314159

    ヒント

    labSend を使用してデータを送信するワーカーは、受信側ワーカーがそのデータを受信する前に戻る場合があります。共有リソースを閉じる場合など、spmd ブロックまたは通信ジョブのワーカーを同期する必要があるときは、labSend および labReceive を呼び出した後に labBarrier を使用します。

    拡張機能

    バージョン履歴

    R2006a より前に導入

    すべて折りたたむ

    R2022b: 関数 labSend は非推奨

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

    参考