我在MATLAB中編寫了一個函數(我的第一,所以不要太快判斷),它應該根據3個輸入參數編寫批處理文件:使用fprintf或sprintf時的值不同
write_BatchFile(setup,engine,np)
這裏設置由一個或多個串,發動機僅由一個串和NP的是一個數,例如:
setup = {'test1.run';'test2.run';'test3.run'};
engine = 'Engine.exe';
np = 4; % number of processors/cores
我會放棄我的腳本的第一部分,這是一個更廣泛的,但在必要的情況下,我可以提供後面的整個腳本。總之,一旦所有3個參數已經確定,它成功地做,我寫了下面的,這是我的腳本的最後一部分:
%==========================================================================
% Start writing the batch file
%==========================================================================
tmpstr = sprintf('\nWriting batch file batchRunMPI.bat...');
disp(tmpstr); clear tmpstr;
filename = 'batchRunMPI.bat';
fid = fopen(filename,'w');
fprintf(fid,'set OMP_NUM_THREADS=1\n');
for i = 1:length(setup);
fprintf(fid,'mpiexec -n %d -localonly "%s" "%s"\n',np,engine,setup{i});
fprintf(fid,'move %s.log %s.MPI_%d.log\n',setupname{i},setupname{i},np);
end
fclose all;
disp('Done!');
注意setupname如下使用fileparts:
[~,setupname,setupext] = fileparts(setup);
然而,在看的時候導致批處理文件,我最終得到的值52,我表明我的核心數量(= 4),例如:
mpiexec -n 52 -localonly "Engine.exe" "test1.run"
mpiexec -n 52 -localonly "Engine.exe" "test2.run"
mpiexec -n 52 -localonly "Engine.exe" "test3.run"
相反,我會希望得到的結果是:
mpiexec -n 4 -localonly "Engine.exe" "test3.run", etc
當我檢查np的價值它返回,所以我很困惑這個52從哪裏來。
我的感覺是,這是一個非常簡單的解決方案,我只是沒有意識到,但迄今爲止我還沒有找到任何東西,這就是我在這裏發佈的原因。所有幫助表示讚賞!
-Daniel
謝謝你這麼快的回覆!您對轉換爲字符串是正確的,並且使用您的建議(str2double)對其進行更改使其可以正常工作。 所以我爲這樣一個簡單的答案寫了如此廣泛的帖子。 再次感謝! – Daniel 2014-10-08 02:00:11