このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
parallel.pool.Constant
データまたは関数ハンドルからの parallel.pool.Constant のビルド
構文
C = parallel.pool.Constant(X)
C = parallel.pool.Constant(FH)
C = parallel.pool.Constant(FH,CLEANUP)
C = parallel.pool.Constant(COMP)
説明
C = parallel.pool.Constant(X)
は、値 X
を各ワーカーにコピーし、parallel.pool.Constant オブジェクト C
を返します。このオブジェクトによって、各ワーカーは、プロパティ C.Value
を使用して並列言語構成 (parfor
、spmd
、parfeval
) 内で値 X
にアクセスできるようになります。これにより、X
のワーカーへの転送が 1 度のみになるため、同じ定数データセットにアクセスする複数の parfor ループがある場合にパフォーマンスが向上します。
C = parallel.pool.Constant(FH)
は、各ワーカーの関数ハンドル FH
を評価して、結果を C.Value
に保存します。これも、ファイル ハンドルやデータベース接続など、あらゆるハンドル型リソースを作成してワーカー上で使用する場合に役立ちます。
C = parallel.pool.Constant(FH,CLEANUP)
は、各ワーカーの関数ハンドル FH
を評価して、結果を C.Value
に保存します。C
が消去されている場合、関数ハンドル CLEANUP
は、各ワーカーの単一の引数 C.Value
を使用して評価されます。
C = parallel.pool.Constant(COMP)
は、Composite COMP
に保存された値を使用し、それらの値を各ワーカーの C.Value
に保存します。これは、データが大きすぎてクライアントには適さない場合や、ワーカーのみがアクセスできるファイルからデータを読み込み中である場合など、parfor ループ内部で使用する必要があるデータをワーカー上にしか作成できない場合に特に役立ちます。COMP
に各ワーカー上で定義された値が含まれていない場合はエラーになります。
ヒント
parallel.pool.Constant
は MATLAB クライアント セッション内で呼び出されなければなりません。
parallel.pool.Constant
は、既に実行中の並列プール、または後続の並列プールと共に使用できます。
例
クライアント内の配列からの parallel.pool.Constant の作成
この例では、数値による parallel.pool.Constant を作成し、同じプールの複数の parfor
ループで使用する方法を説明します。
まず、クライアント上に何らかの大規模データを作成し、次に parallel.pool.Constant をビルドして、データを 1 度だけプールに転送します。
data = rand(1000); c = parallel.pool.Constant(data); for ii = 1:10 % Run multiple PARFOR loops accessing the data. parfor jj = 1:10 x(ii,jj) = c.Value(ii,jj); end end
関数ハンドルからの parallel.pool.Constant の作成
この例では、関数ハンドルとクリーンアップ関数を使用して parallel.pool.Constant を作成する方法を説明します。
各ワーカー上に一時ファイルを作成します。@fclose
を 2 番目の引数として渡すことで、c
がスコープ外になった時にファイルが自動的に閉じられるようにします。
c = parallel.pool.Constant(@() fopen(tempname(pwd),'wt'),@fclose); spmd disp(fopen(c.Value)); % Displays the temporary filenames. end parfor idx = 1:1000 fprintf(c.Value,'Iteration: %d\n',idx); end clear c; % Closes the temporary files.
Composite からの parallel.pool.Constant の作成
この例では、Composite として大規模なデータセットを spmd
ブロック内のプール ワーカーに作成し、そのデータを parallel.pool.Constant として parfor
ループ内で使用する方法を説明します。
spmd if spmdIndex == 1 x = spmdBroadcast(1,rand(5000)); else x = spmdBroadcast(1); end end xc = parallel.pool.Constant(x); parfor idx = 1:10 s(idx) = sum(xc.Value(:,idx)); end s
s = 1.0e+03 * 2.5108 2.5031 2.5123 2.4909 2.4957 2.5462 2.4859 2.5320 2.5076 2.5432
バージョン履歴
R2015b で導入
参考
parfor
| spmd
| parpool
| parfeval
| parcluster