Main Content

Composite

クライアントから複数のワーカー上の非分散変数を作成およびアクセス

    説明

    Composite オブジェクトには、spmd ステートメントを実行する並列ワーカーに格納された変数への参照が含まれます。Composite オブジェクトは、各ワーカーにつき 1 つの要素をもつ cell 配列に似ていて、ワーカーごとに異なる値を含むことができます。cell 配列のインデックス付けを使用して値を取得でき、インデックスまたは spmd ブロックを使用してエントリの値を定義できます。Composite がクライアントに存在し、並列プールが開いたままになっている間は、ワーカー上の実際のデータは以降の spmd の実行で引き続き使用可能です。

    作成

    spmd ステートメントは、spmd ステートメントの本体が値を返すと、クライアント上に Composite の変数を自動的に作成します。そのため、Composite オブジェクトを直接作成する必要はほとんどありません。

    Composite オブジェクトは関数 Composite を使用して明示的に作成することもできます。

    説明

    c = Composite は、現在の並列プールのワーカーを使用してクライアント上に Composite オブジェクトを作成します。

    オブジェクトが参照する実際のワーカーの数は、プールのサイズおよび既存のすべての Composite オブジェクトのサイズによって決まります。並列プールが開いていない場合、関数 Composite は既定のプロファイルを使用してワーカーの並列プールを起動します。

    Composite オブジェクトを手動で作成する場合、spmd ステートメントの外で行う必要があります。初期状態では、手動で作成した Composite オブジェクトの各エントリにはデータがありません。エントリの値を定義するには、インデックスまたは spmd ブロックを使用します。

    c = Composite(nworkers) は、使用するワーカーの数を指定して Composite オブジェクトを作成します。実際のワーカーの数は、現在の並列プールのサイズおよび他の既存の Composite オブジェクトと両立するワーカーの最大数になります。ワーカー数の制約が満たされない場合、ソフトウェアはエラーを返します。

    入力引数

    すべて展開する

    Composite オブジェクトを作成するワーカー数。正の整数、Inf 値、あるいは正の整数または Inf 値を含む 2 要素ベクトルとして指定します。nworkers がスカラーの場合、これは使用するワーカーの正確な数を指定します。nworkers が 2 要素ベクトルの場合、最初と 2 番目の要素が、それぞれワーカーの最小数と最大数を指定します。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    出力引数

    すべて展開する

    並列プールのワーカーを使用するクライアント上の Composite 配列。Composite オブジェクトとして返されます。

    オブジェクト関数

    existCheck whether Composite is defined on workers
    gatherTransfer distributed array, Composite object, or gpuArray object to local workspace
    subsasgnSubscripted assignment for Composite
    subsrefSubscripted reference for Composite

    Composite オブジェクトの他のオブジェクト関数は、以下の MATLAB® 配列関数と同様に動作します。

    disp変数の値を表示
    endコードのブロックを終了、または最後の配列インデックスを示す
    isempty配列が空かどうかを判別
    lengthLength of largest array dimension
    ndims配列の次元数
    numel配列の要素数
    sizeArray size

    すべて折りたたむ

    この例では、要素が定義されていない Composite オブジェクトを作成した後、クライアントで for ループを使用して値を代入する方法を説明します。

    4 つのワーカーをもつ並列プールを起動し、ワーカーごとに 1 つの要素をもつ Composite オブジェクトを作成します。

    p = parpool("Processes",4);
    Starting parallel pool (parpool) using the 'Processes' profile ...
    Connected to parallel pool with 4 workers.
    
    c = Composite
     
    c =
     
       Worker 1: No data
       Worker 2: No data
       Worker 3: No data
       Worker 4: No data
     
    

    クライアントで for ループを使用して、Composite オブジェクトの要素の値を定義します。各要素に代入する値はワーカーに格納されます。Composite オブジェクトを表示します。

    for w = 1:length(c)
        c{w} = rand;
    end
    c{:}
    ans = 0.8147
    
    ans = 0.9058
    
    ans = 0.1270
    
    ans = 0.9134
    

    この例では、ワーカー数、つまり Composite オブジェクトの要素数を指定する方法を説明します。

    my_Profile というプロファイルを使用して、10 個のワーカーからなる並列プールを起動します。

    parpool("my_Profile",10);
    Starting parallel pool (parpool) using the 'my_Profile' profile ...
    Connected to parallel pool with 10 workers.
    

    現在の並列プールの 4 つのワーカーのみをもつ Composite オブジェクトを作成し、spmd ブロックで Composite の要素に値を代入します。Composite オブジェクトを表示します。

    c = Composite(4);
    spmd
        c = spmdIndex;
    end
    c{:}
    ans = 1
    
    ans = 2
    
    ans = 3
    
    ans = 4
    

    この例では、spmd ブロックと分散配列を使用してクライアント上に Composite オブジェクトを作成する方法を説明します。

    4 つのワーカーをもつ並列プールを起動し、4 個の整数からなる配列をワーカーに分散します。各ワーカーは 1 つの整数を取得します。

    p = parpool("Processes",4);
    d = distributed([3 1 4 2]);

    各ワーカーで分散配列の一部を使用して、Composite オブジェクト c の値を設定します。

    spmd
    c = getLocalPart(d);
    end

    c に関する情報を表示して確認します。

    c{:}
    ans = 3
    
    ans = 1
    
    ans = 4
    
    ans = 2
    
    whos c
      Name      Size            Bytes  Class        Attributes
    
      c         1x4               489  Composite              
    

    ヒント

    • 関数 Composite は、既存の並列プールのワーカー上に Composite オブジェクトを作成します。プールがない場合、並列基本設定でプールの自動起動が無効になっていなければ、関数 Composite により新たな並列プールが起動されます。並列プールがなく、Composite による起動もできない場合は、クライアント ワークスペースに 1 行 1 列の Composite オブジェクトが作成されます。

    拡張機能

    バージョン履歴

    R2008a で導入