我已经在MATLAB中编写了一个函数(我的第一个,所以不能太快判断),它应该根据3个输入参数编写一个批处理文件:
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!');
使用 fileparts 注意 setupname :
[~,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 的值时,它返回 4 ,所以我很困惑这52来自哪里。
我的感觉是它是一个非常简单的解决方案,我只是没有意识到,但到目前为止我还没有找到任何关于此的东西,这就是为什么我会这样做的原因。发布在这里。感谢所有帮助!
-Daniel
答案 0 :(得分:0)
似乎在某个阶段np
正在转换为字符串。字符'4'
具有整数值52
,它解释了您获得的内容。你有几个选择:
a)找出将np
转换为字符串并将其更改的位置
b)%d
到%s
,因此您获得'4'
而不是52
c)将np
语句的printf
部分更改为str2double(np)
。