Main Content

labProbe

(非推奨) spmd の現在のワーカーが受信対象とするデータがあるかどうかを判定する

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

    説明

    tf = labProbe は、spmd ブロックまたは通信ジョブにおける現在のワーカーが labReceive を使用して受信する、対象のデータがあるかどうかをテストします。

    ヒント

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

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

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

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

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

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

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

    [tf,sources,tags] = labProbe(___) は、現在のワーカーが受信対象とするデータがあるかどうかをテストし、データを送信しているワーカーの labindexsource として返し、受信可能なデータのタグを tag として返します。

    すべて折りたたむ

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

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

    parpool(4);

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

    spmd ブロックを作成します。labindex1 と等しいワーカー上で、配列を作成します。labSend を使用して、labindex2 と等しいワーカーに配列を送信します。

    labBarrier を使用して、labindex1 と等しいワーカーからデータが送信された後に、ワーカー上で labProbe が必ず呼び出されるようにします。次に、labProbe を使用して、各ワーカーが受信対象とするデータがあるかどうかをテストします。labReceive を使用してデータを収集します。

    spmd
        switch labindex
            case 1
                A = magic(3);
                labSend(A,2);
        end
        
        labBarrier;
    
        tf = labProbe
        
        if tf
            labReceive;
        end
    end
    Worker 1: 
      
      tf =
      
        logical
      
         0
      
    Worker 2: 
      
      tf =
      
        logical
      
         1
      
    Worker 3: 
      
      tf =
      
        logical
      
         0
      
    Worker 4: 
      
      tf =
      
        logical
      
         0
      

    入力引数

    すべて折りたたむ

    ソース ワーカーのインデックス。正の整数スカラーまたは文字ベクトル 'any' として指定します。値は、現在の spmd ブロックまたは通信ジョブを実行しているワーカーの数である、numlabs で指定された値以下でなければなりません。正の整数スカラーとして指定した場合、現在のワーカーが受信する、labindexsource と等しいワーカーからのデータがあれば、labProbe は logical 1 (true) を返します。指定しない場合、現在のワーカーが任意のワーカーから受信するデータがあれば、labProbe は logical 1 (true) を返します。

    例: 1

    データに付加されたタグ。0 または正の整数スカラーとして指定します。指定した場合、tag と等しい tag を指定した labSend を使用して送信された、現在のワーカーで受信されるデータがあれば、labProbe は logical 1 (true) を返します。

    例: 314159

    出力引数

    すべて折りたたむ

    現在のワーカーでまだ受信されていないデータを送信したワーカーのインデックス。正の整数スカラーまたは空として指定します。値は、データを送信した各ワーカーの labindex と等しくなります。受信される対象データがない場合、sources[] です。

    ワーカーから送信された、現在のワーカーでまだ受信されていないデータに付加されたタグ。正の整数スカラーまたは空として指定します。受信される対象データがない場合、tags[] です。

    バージョン履歴

    R2006a より前に導入

    すべて折りたたむ

    R2022b: labProbe は非推奨

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

    参考