Parforループに​おけるワークスペース​上の変数の扱いについ​て

4 visualizaciones (últimos 30 días)
O.E
O.E el 6 de Mzo. de 2018
Comentada: Jiro Doke el 8 de Mzo. de 2018
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

Respuesta aceptada

Jiro Doke
Jiro Doke el 6 de Mzo. de 2018
基本的には parfor 内の計算はワーカーの MATLAB プロセスで計算されるため、使われる変数はワーカーのワークスペースに一時的でも存在しなくてはなりません。ワーカーは共有メモリ(shared memory)ではなく分散メモリ(distributed memory)の構造のため、必要なデータはすべてコピーされる必要があります。
ただし、書き方によってはすべてのワーカーに同じデータを渡すのではなく、それぞれのワーカーが必要としている部分だけを渡すことができます。(参考: スライス化された変数 )例えば
IN = read_input();
parfor i = 1:size(IN,2)
final(i) = abc(IN(:,i))
end
この場合、 IN はインデックスされていて、各ワーカーにはそれぞれが担当する列だけが渡され、データ通信が最小限に抑えられます。
また、 abc の中でどのような処理を行っているかにもよりますが、 分散配列 を使ってデータをワーカーに分散して扱う方法もあります。
  2 comentarios
O.E
O.E el 6 de Mzo. de 2018
INはCell行列になっています。そして、全列が各ワーカーで必要となる構造になってしまっています。ABC内ではINとその他のデータを用いて(aがパラメータ)SIMULINKでシミュレーションを行っています。
INは2列のデータ列なのですが、非常に長く、結果として容量がかなり大きいため、上手くメモリ使用量を抑える手法を検討しています。
分散配列というのは各列をワーカーに分散させる手法の一つという認識であってますでしょうか。
Jiro Doke
Jiro Doke el 8 de Mzo. de 2018
もしかして IN は Simulink モデルへの入力データ(時間、データ)ですか?
もし、すべてのデータが各ワーカーで必要な場合は、やはりすべてのワーカーにコピーが必要ですが、ひとつ言えますのは、この問題はメモリの問題というよりデータ通信(クライアントMATLABとワーカーとのやり取り)の問題かもしれません。もし、各ワーカーで read_input() が実行できる場合は、 abc の中で read_input() を呼ぶという方法をお勧めします。すると各ワーカーでデータを読み込むため、通信のオーバーヘッドがなくなります。
「分散配列というのは各列をワーカーに分散させる手法の一つという認識であってますでしょうか。」
そういうイメージですね。ただ、列単位とは限りません。

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre 並列 for ループ (parfor) en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!