Main Content

gop

(非推奨) spmd ワーカー上の配列を削減する

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

    説明

    B = gop(fcn,A) は、関数 fcn を使用して、spmd ブロックまたは通信ジョブを実行している各ワーカー上で定義されている配列 A を削減します。

    たとえば、gop(@plus,A) は、各ワーカー上で定義されている配列 A の和を返します。

    MATLAB は関数 fcn を使用し、この関数を N-1 回呼び出すことにより、各ワーカー上で定義されている配列 A を削減します。

    • N は、その spmd ブロックまたは通信ジョブの numlabs によって返される値。

    • Aj は、spmd ワーカー j 上で定義された配列 A

    parforparfeval、または parfevalOnAll を使用して並列プールでコードを実行する場合、各ワーカーは独立しており、相互の通信は行われません。これらのワーカー上で gop を使用した場合、結果はクライアント上で gop を使用した場合と同じになります。

    numlabs1 と等しい場合、BA と等しくなります。

    B = gop(fcn,A,destination) は、各ワーカー上で定義されている配列 A を削減し、結果を 1 つのワーカーのみに保存します。

    すべて折りたたむ

    この例では、gop を使用して、全ワーカー間における x の最大値を計算する方法を説明します。

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

    parpool(4);

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

    spmd ブロック内の各ワーカー上で labindex を実行し、結果をスカラー A に保存します。gopmax を使用して、各ワーカーの A の最大値を計算します。

    gop を使用する場合、既定では各ワーカーに結果が保存されます。クライアント上では、CComposite 配列です。結果を取得するには、Composite 配列にインデックスを付けます。

    spmd
        A = labindex;
        C = gop(@max,A);
    end
    disp(C{1})
         4

    入力引数

    すべて折りたたむ

    入力配列。MATLAB 変数として指定します。

    例: magic(3)

    リダクション関数。関数ハンドルとして指定します。関数は、2 個の入力引数を受け入れなければなりません。

    例: fcn = @max

    データ型: function_handle

    保存先ワーカーのインデックス。正の整数スカラーとして指定します。値は、現在の spmd ブロックまたは通信ジョブを実行しているワーカーの数である、numlabs で指定された値以下でなければなりません。指定した場合、gop(fcn,A,destination) の結果は 1 つのワーカー上にのみ保存されます。labindexdestination と等しいワーカーにおいて、C は演算の結果となります。他のすべてのワーカーでは、C[] です。

    例: 1

    アルゴリズム

    gop(fcn,A) を使用すると、fcn を使用して各ワーカーからの A の値が結合されます。

    spmd ブロックまたは通信ジョブが常に同じ結果を生成するようにするには、fcn を結合関数として指定します。

    Diagram showing how four workers combine arrays specified as A into a single array, B.

    拡張機能

    バージョン履歴

    R2006a より前に導入

    すべて折りたたむ

    R2022b: gop は非推奨

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