在Matlab中使用parfor来读取和修改文件

时间:2015-02-15 10:22:40

标签: matlab parallel-processing parfor

我有一个代码,我需要多次读取和修改某个文件。由于代码需要花费大量时间,因此我尝试使用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'的副本。

虽然这有助于改善时间问题,但问题是每次运行模拟时我都要创建这些文件,在我的情况下,我需要做很多次。我想知道是否有人有更好的想法来克服这个问题?

0 个答案:

没有答案