最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

distributed

クライアント ワークスペースまたはデータ ストアのデータから分散配列を作成

説明

D = distributed(ds)datastore ds から分散配列を作成します。D は分散配列であり、開いている並列プールの複数のワーカーに各部分が格納されます。

分散配列の要素をプールから取得し、MATLAB® ワークスペースの配列に戻すには、gather を使用します。

D = distributed(X) は、配列 X から分散配列を作成します。

この方法でローカル データから分散配列を作成するのは、MATLAB クライアントがメモリに X 全体を格納できる場合にのみ適しています。大きな分散配列を作成する場合は、ones(___,'distributed')zeros(___,'distributed') などのコンストラクター メソッドの 1 つを使用します。一覧については、コンストラクターを参照してください。

入力引数が既に分散配列になっている場合、結果は入力と同じになります。

D = distributed(C,dim) は、Composit 配列 C から分散配列を作成します。C のエントリは連結され、次元 dim に沿って分散されます。dim を省略すると、最初の次元が分散次元となります。

Composite 配列のすべてのエントリでクラスが同じでなければなりません。分散次元以外の次元は一致しなければなりません。

分散配列の作成

小さな配列を作成し、分散します。

Nsmall = 50;
D1 = distributed(magic(Nsmall));

作成メソッドを使用して、直接、大きな分散配列を作成します。

Nlarge = 1000;
D2 = rand(Nlarge,'distributed');

分散配列の要素を取得し、配列の位置を Class で確認します。

D3 = gather(D2);
whos
  Name           Size           Bytes  Class

  D1            50x50             733  distributed
  D2          1000x1000           733  distributed
  D3          1000x1000       8000000  double
  Nlarge         1x1                8  double
  Nsmall         1x1                8  double

データ ストアからの分散配列の作成

次の例では、datastore を使用して分散配列を作成し、読み込む方法を説明します。まず、例のデータセットを使用してデータ ストアを作成します。このデータセットは小さすぎるため、ワーカー間でデータが均等に分割されません。大規模なデータセットをシミュレートするため、repmat を使用してデータ ストアのサイズを人為的に増加します。

files = repmat({'airlinesmall.csv'}, 10, 1);
ds = tabularTextDatastore(files);

例の変数を選択します。

ds.SelectedVariableNames = {'DepTime','DepDelay'};
ds.TreatAsMissing = 'NA';

データ ストアを並列で読み取ることにより分散テーブルを作成します。ワーカーごとに 1 パーティションとなるように、データ ストアを分割します。これにより、各ワーカーは対応するパーティションからすべてのデータを読み取ります。ファイルは、ワーカーからアクセス可能な共有場所になければなりません。

dt = distributed(ds);
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.

最後に、分散テーブルに関する概要情報を表示します。

summary(dt) 
Variables:

    DepTime: 1,235,230×1 double
        Values:

            min          1
            max       2505
            NaNs    23,510

    DepDelay: 1,235,230×1 double
        Values:

            min      -1036
            max       1438
            NaNs    23,510

Composite 配列から分散配列を作成

ワーカーの並列プールを起動し、spmd を使用して Composite 配列を作成します。

p = parpool("local",4);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 4).
spmd
C = rand(3,labindex-1);
end
C
 
C =
 
   Lab 1: class = double, size = [3  0]
   Lab 2: class = double, size = [3  1]
   Lab 3: class = double, size = [3  2]
   Lab 4: class = double, size = [3  3]
 

Composite 配列から分散配列を作成するには、関数 distributed を使用します。この例では、エントリを 2 番目の次元に沿って分散します。

d = distributed(C,2)
d =

    0.6383    0.9730    0.2934    0.3241    0.9401    0.1897
    0.5195    0.7104    0.1558    0.0078    0.3231    0.3685
    0.1398    0.3614    0.3421    0.9383    0.3569    0.5250
spmd
    d
end
Lab 1: 
  
  This worker does not store any elements of d.
  
Lab 2: 
  
  This worker stores d(:,1).
  
          LocalPart: [3x1 double]
      Codistributor: [1x1 codistributor1d]
  
Lab 3: 
  
  This worker stores d(:,2:3).
  
          LocalPart: [3x2 double]
      Codistributor: [1x1 codistributor1d]
  
Lab 4: 
  
  This worker stores d(:,4:6).
  
          LocalPart: [3x3 double]
      Codistributor: [1x1 codistributor1d]
  

計算が完了したら、並列プールを削除します。

delete(p);

ヒント

  • 分散配列は既存の並列プールのワーカーで作成されます。プールがない場合、並列設定でプールの自動起動が無効になっていなければ、distributed によって新しい並列プールが起動されます。並列プールがなく、distributed による並列プールの起動もできない場合、クライアント ワークスペースに完全な配列が作成されます。