Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

distributed

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

説明

D = distributed(ds)datastore ds から分散配列を作成します。D は分散配列であり、開いている並列プールの複数のワーカーに各部分が格納されます。配列全体が単一のエンティティとして操作されますが、ワーカーは配列の担当部分のみを処理し、必要に応じて自動的にワーカー間でデータを転送します。

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

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

この方法でローカル データから分散配列を作成するのは、MATLAB クライアントがメモリに X 全体を格納できる場合にのみ適しています。大規模な分散配列を作成するには、前の構文を使用して datastore から distributed 配列を作成するか、ones(___,"distributed")zeros(___,"distributed") のような、いずれかの配列作成関数を使用します。直接 distributed 配列を作成できる関数のリストは、distributed を参照してください。

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

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

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

すべて折りたたむ

次の例では、分散配列を作成して取得する方法を説明します。

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

Nsmall = 50;
D1 = distributed(magic(Nsmall));
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.

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

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

分散配列の要素を取得してローカル ワークスペースに戻します。whos を使用すると、変数 Class を調べてワークスペース内のデータの場所を判定することができます。

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

  D1            50x50                20000  distributed                          
  D2          1000x1000            8000000  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

ワーカーの並列プールを起動し、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 =
 
   Worker 1: class = double, size = [3  0]
   Worker 2: class = double, size = [3  1]
   Worker 3: class = double, size = [3  2]
   Worker 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
Worker 1: 
  
  This worker does not store any elements of d.
  
Worker 2: 
  
  This worker stores d(:,1).
  
          LocalPart: [3x1 double]
      Codistributor: [1x1 codistributor1d]
  
Worker 3: 
  
  This worker stores d(:,2:3).
  
          LocalPart: [3x2 double]
      Codistributor: [1x1 codistributor1d]
  
Worker 4: 
  
  This worker stores d(:,4:6).
  
          LocalPart: [3x3 double]
      Codistributor: [1x1 codistributor1d]
  

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

delete(p);

入力引数

すべて折りたたむ

データのコレクションのデータストア。次のいずれかとして指定します。

出力
テキスト ファイルTabularTextDatastore
イメージ ファイルImageDatastore
スプレッドシート ファイルSpreadsheetDatastore
mapreduce で生成された MAT ファイルまたはシーケンス ファイルKeyValueDatastore
カスタム形式ファイルFileDatastore
関数 write で生成された、tall データ型の MAT ファイルまたはシーケンス ファイル。 TallDatastore
Parquet ファイルParquetDatastore
データベースDatabaseDatastore (Database Toolbox)

分散する配列。配列として指定します。

分散する Composite 配列。Composite 配列として指定します。

分散次元。スカラー整数として指定します。分散次元は、Composite 配列を分散する次元を指定します。

出力引数

すべて折りたたむ

開いている並列プールの複数のワーカーに各部分が格納されている分散配列。分散配列として返されます。

ヒント

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

バージョン履歴

R2008a で導入