Parforループにおけるワークスペース上の変数の扱いについて
4 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Jiro Doke
2018-3-6
基本的には parfor 内の計算はワーカーの MATLAB プロセスで計算されるため、使われる変数はワーカーのワークスペースに一時的でも存在しなくてはなりません。ワーカーは共有メモリ(shared memory)ではなく分散メモリ(distributed memory)の構造のため、必要なデータはすべてコピーされる必要があります。
IN = read_input();
parfor i = 1:size(IN,2)
final(i) = abc(IN(:,i))
end
この場合、 IN はインデックスされていて、各ワーカーにはそれぞれが担当する列だけが渡され、データ通信が最小限に抑えられます。
2 个评论
Jiro Doke
2018-3-8
もしかして IN は Simulink モデルへの入力データ(時間、データ)ですか?
もし、すべてのデータが各ワーカーで必要な場合は、やはりすべてのワーカーにコピーが必要ですが、ひとつ言えますのは、この問題はメモリの問題というよりデータ通信(クライアントMATLABとワーカーとのやり取り)の問題かもしれません。もし、各ワーカーで read_input() が実行できる場合は、 abc の中で read_input() を呼ぶという方法をお勧めします。すると各ワーカーでデータを読み込むため、通信のオーバーヘッドがなくなります。
「分散配列というのは各列をワーカーに分散させる手法の一つという認識であってますでしょうか。」
そういうイメージですね。ただ、列単位とは限りません。
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 並列 for ループ (parfor) 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!