100個の並列処理(​parfor)の複数​個が処理されません

3 Ansichten (letzte 30 Tage)
Kenta
Kenta am 26 Sep. 2022
Kommentiert: Kenta am 27 Sep. 2022
計算時間削減のため、並列処理(parfor)でbatファイルを100回実行したいと考えています。
下記のようなコードで実行したところ、エラーは出ませんが15~16個実行されていません。
(実行された場合、実行結果ファイルが複数個出力されるのですが、15~16個出力されていませんでした。)
解決策をご存じであれば、教えていただきたいです。
行いたい処理イメージ
1. 事前に作成したdatファイル(ex_1.dat,ex_2.dat.....ex_100.dat)の名前をcell配列として取り込んだbatファイルの指定行に書き込む
2. main.batを実行する
3. すべての番号(1から100まで)で出力結果を得る
% 繰り返し回数
N = 100;
% batファイルの行数
bat_row_size = 24;
% batファイルの名前書き換えに必要なもの
case_name = "ex_";
set = "set";
CASE = "CASE=";
parfor i = 1:N
% 現在の番号を変数に保存
number_N = num2str(i);
% batファイルをcell配列として読み込み
fid = fopen('main_ori.bat');
bat_j = 1;
bat = cell(bat_row_size,1);
while (~feof(fid))
tline = fgetl(fid);
bat{bat_j,:} = tline;
bat_j = bat_j + 1;
end
% main.batファイル内のケース名を書き換え
casename = append(set,' ',CASE,case_name,number_N);
bat(9,1) = cellstr(casename);
% batファイルをFiletypeオプションで、テキストファイルだと設定する
writecell(bat, 'main.bat','FileType','text')
% FEM実行
system('main.bat');
end

Akzeptierte Antwort

Kojiro Saito
Kojiro Saito am 26 Sep. 2022
並列処理で同じファイル名に対して書き込みをおこなっているため、ファイル競合が起きている可能性があります。
繰り返し毎にファイル名を変更して実行してみてはどうでしょうか?
parfor の中を以下のように変更します。
% batファイルをFiletypeオプションで、テキストファイルだと設定する
batname = sprintf('main_%s.bat', number_N);
writecell(bat, batname,'FileType','text')
% FEM実行
system(batname);
% 不要ファイルの削除
delete(batname)
  1 Kommentar
Kenta
Kenta am 27 Sep. 2022
提案していただいたコードを基に変更して実行したところ、行いたい処理ができました。
ご回答いただき、ありがとうございます。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu スクリプト finden Sie in Help Center und File Exchange

Produkte


Version

R2022a

Community Treasure Hunt

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

Start Hunting!