Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

並列プールでの tall 配列の使用

Parallel Computing Toolbox™ がある場合は、ローカルの MATLAB® セッションまたはローカルの並列プールで tall 配列を使用できます。MATLAB Parallel Server™ がインストールされている場合は、クラスター上でも tall 配列の計算を実行できます。この例では、マシン上のローカル クラスターでワーカーを使用します。コードをローカルで作成してからスケール アップすることで、アルゴリズムを書き換えることなく Parallel Computing Toolbox および MATLAB Parallel Server が提供する機能を利用できます。tall 配列およびデータ ストアを使用するビッグ データのワークフローも参照してください。

データ ストアを作成し、tall table に変換します。

ds = datastore('airlinesmall.csv');
varnames = {'ArrDelay', 'DepDelay'};
ds.SelectedVariableNames = varnames;
ds.TreatAsMissing = 'NA';

Parallel Computing Toolbox がインストールされている場合、関数 tall を使用すると、既定の並列プールの基本設定をオフにしていない限り、ワーカーの並列プールが MATLAB により自動的に起動されます。既定のクラスターは、マシン上のローカル ワーカーを使用します。

メモ

並列プールの自動的な起動をオフにするには、並列基本設定を変更します。[parfor などの並列キーワードが実行された場合に並列プールを自動的に作成する (まだ存在していない場合)] オプションをオフにした場合、関数 tall で並列処理にプールを使用するには明示的にプールを起動しなければなりません。並列基本設定の指定を参照してください。

Parallel Computing Toolbox がある場合は、MATLAB の tall table の例と同じコードを実行して、ローカル マシンのワーカー上でそのコードを自動的に並列実行できます。

データ ストアから tall table tt を作成します。

tt = tall(ds)
Starting parallel pool (parpool) using the 'Processes' profile ... connected to 4 workers.

tt =

  M×2 tall table 

    ArrDelay    DepDelay
    ________    ________

     8          12      
     8           1      
    21          20      
    13          12      
     4          -1      
    59          63      
     3          -2      
    11          -1      
    :           :
    :           :

この表示は、行数 M が未知であることを示しています。M は計算が完了するまではプレースホルダーです。

tall table から到着遅延 ArrDelay を抽出します。このアクションで、以降の計算に使用する新たな tall 配列変数が作成されます。

a = tt.ArrDelay;

tall 配列に対して一連の操作を指定できます。この操作は、gather を呼び出すまで実行されません。こうすることで、長時間かかる可能性のある複数のコマンドをバッチ処理できるようになります。たとえば、到着遅延の平均と標準偏差を計算します。これらの値を使用して、平均値から 1 標準偏差内にある遅延の上下のしきい値を作成します。

m = mean(a,'omitnan');
s = std(a,'omitnan');
one_sigma_bounds = [m-s m m+s];

gather を使用して one_sigma_bounds を計算し、その解をメモリに格納します。

sig1 = gather(one_sigma_bounds)
Evaluating tall expression using the Parallel Pool 'Processes':
- Pass 1 of 1: Completed in 4.5 sec
Evaluation completed in 6.3 sec

sig1 =

  -23.4572    7.1201   37.6975

複数の事項を一度に評価する場合は、複数の入力と出力を gather に指定できます。これにより、それぞれの tall 配列で gather を個別に呼び出すよりも高速になります。例として、到着遅延の最小値と最大値を計算します。

[max_delay, min_delay] = gather(max(a),min(a))
max_delay =

        1014

min_delay =

   -64

逐次で開発してローカル ワーカーまたは指定されたクラスターを使用しない場合は、次のコマンドを入力します。

mapreducer(0);
tall 配列の作成後に mapreducer を使用して実行環境を変更した場合、tall 配列は無効になり、再作成しなければなりません。ローカル ワーカーまたは指定されたクラスターを再び使用するには、次のコマンドを入力します。
mapreducer(gcp);

メモ

tall 配列を扱うアルゴリズムを開発する利点の 1 つは、コード作成が一度ですむことです。コードをローカルで作成した後、アルゴリズムを書き換えずに mapreducer を使用してクラスターにスケール アップできます。例は、Spark クラスターでの tall 配列の使用を参照してください。

参考

| | | | |

関連する例

詳細