Parforループにおけるワークスペース上の変数の扱いについて
4 views (last 30 days)
Show older comments
Parforループ上での変数の扱いについて教えてください。
下記のようなプログラムを書いた場合、Workspace上の変数INはワーカーの数だけ読み込まれるのでしょうか?
例えばINのサイズが100MB程度だとして、ワーカーの数が4つあるとすると約400MBのメモリを占有するという考え方であっているでしょうか。
またその場合、INは下のfunctionでは読み込みだけしか行わないので、それぞれのワーカー上で展開しなくてもよい方法などはありませんか?
j = (0:0.05:0.3);
[IN] = read_Input();
c =1/32;
parfor i =1:length(j)
a = j(1,i);
[final]=abc(a,b,c,IN);
end
0 Comments
Accepted Answer
Jiro Doke
on 6 Mar 2018
基本的には parfor 内の計算はワーカーの MATLAB プロセスで計算されるため、使われる変数はワーカーのワークスペースに一時的でも存在しなくてはなりません。ワーカーは共有メモリ(shared memory)ではなく分散メモリ(distributed memory)の構造のため、必要なデータはすべてコピーされる必要があります。
IN = read_input();
parfor i = 1:size(IN,2)
final(i) = abc(IN(:,i))
end
この場合、 IN はインデックスされていて、各ワーカーにはそれぞれが担当する列だけが渡され、データ通信が最小限に抑えられます。
2 Comments
Jiro Doke
on 8 Mar 2018
もしかして IN は Simulink モデルへの入力データ(時間、データ)ですか?
もし、すべてのデータが各ワーカーで必要な場合は、やはりすべてのワーカーにコピーが必要ですが、ひとつ言えますのは、この問題はメモリの問題というよりデータ通信(クライアントMATLABとワーカーとのやり取り)の問題かもしれません。もし、各ワーカーで read_input() が実行できる場合は、 abc の中で read_input() を呼ぶという方法をお勧めします。すると各ワーカーでデータを読み込むため、通信のオーバーヘッドがなくなります。
「分散配列というのは各列をワーカーに分散させる手法の一つという認識であってますでしょうか。」
そういうイメージですね。ただ、列単位とは限りません。
More Answers (0)
See Also
Categories
Find more on 並列 for ループ (parfor) in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!