我有一个代码,我需要多次读取和修改某个文件。由于代码需要花费大量时间,因此我尝试使用parfor
来加速它。
parfor i=1:n_par
tmp= fullfile('/path',sprintf('code%d',i),'utchem >> output');
%% MATLABPOOL will synchronise the path and current directory between client and workers
tmpdir=fullfile('/path',sprintf('code%d',i));
cd(tmpdir);
%% INPUT is the file from which each time I read and modify
A = regexp(fileread('INPUT'), '\n', 'split');
A{226} = sprintf('%g %g %g', para(i,1), para(i,2), para(i,3));
A{230} = sprintf('%g %g %g', para(i,4), para(i,5), para(i,6));
A{234} = sprintf('%g %g %g', para(i,7), para(i,8), para(i,9));
%% para is a variable already defined before the parfor loop
%% write the cell into the textfile;
fid = fopen('INPUT', 'w');
fprintf(fid, '%s\n', A{:});
fclose(fid);
%% call the code
system(tmp);
%% copy and rename file
test=['test',num2str(i),'.txt'];
%% rename a file
copyfile('CORE-S.HIST02', test);
hist=textread(test, '%s','delimiter', '\n');
end;
我实施的解决方案包括将每个文件夹'INPUT'
中的同一文件code_i
的副本作为所需时间'n_para'
的副本。
虽然这有助于改善时间问题,但问题是每次运行模拟时我都要创建这些文件,在我的情况下,我需要做很多次。我想知道是否有人有更好的想法来克服这个问题?