MATLAB:并行运行.bat:可能有多个工作目录?
我在Matlab2013a的MATLAB:并行运行.bat:可能有多个工作目录?,matlab,batch-file,parallel-processing,Matlab,Batch File,Parallel Processing,我在Matlab2013a的parfor循环中使用命令system(或dos)运行.bat文件。是否有方法更改命令在哪个目录中执行?到目前为止,它似乎总是当前(工作)目录。另一种选择是在parfor循环中更改工作目录,但这意味着同时拥有多个工作目录,这似乎是不可能的。我这样做的原因是我有一个Simpack模型,并且希望同时运行几个不同的模拟。在串行for循环中,我可以通过一次一个地将模拟规范复制到Simpack文件夹来实现这一点,但在并行情况下,这一点必须更改 parfor i=1:2
parfor
循环中使用命令system
(或dos
)运行.bat文件。是否有方法更改命令在哪个目录中执行?到目前为止,它似乎总是当前(工作)目录。另一种选择是在parfor循环中更改工作目录,但这意味着同时拥有多个工作目录,这似乎是不可能的。我这样做的原因是我有一个Simpack模型,并且希望同时运行几个不同的模拟。在串行for循环中,我可以通过一次一个地将模拟规范复制到Simpack文件夹来实现这一点,但在并行情况下,这一点必须更改
parfor i=1:2
...
cd(path_model_main_temp_i);
system('C:\SIMPACK\SIMPACKv8.9\s_8904\simpack\com\spck.bat simpack integ modelname');
copyfile(path_results_temp_i, path_results{i});
end
这段代码不起作用,但方向正确吗
编辑:原来我的代码有一个不同的问题。在parfor循环中可以有一个
cd
命令。我认为您在这方面做得对。您可以使用getCurrentTask
确定将该目录放在何处。例如,类似这样的内容:
parfor idx = 1:2
t = getCurrentTask();
if isempty(t)
% running on the client - use tempdir
d = tempdir();
else
% on a worker - make a subdirectory using task ID
d = fullfile(tempdir(), num2str(t.ID));
mkdir(d);
end
cd(d);
pwd
% do stuff
end
system('cd somewhere & C:\SIMPACK...');
尝试更改由
system()
命令创建的进程内的目录-这很好,因为它是一个新的、独特的进程,它可以有自己的目录
大概是这样的:
parfor idx = 1:2
t = getCurrentTask();
if isempty(t)
% running on the client - use tempdir
d = tempdir();
else
% on a worker - make a subdirectory using task ID
d = fullfile(tempdir(), num2str(t.ID));
mkdir(d);
end
cd(d);
pwd
% do stuff
end
system('cd somewhere & C:\SIMPACK...');
我在这里猜测,因为我没有Matlab,所以我没有把它作为一个正式的答案,但也许可以尝试
system('cd-somewhere&C:\SIMPACK…')
,这应该允许system()
创建的单独进程有自己的不同目录。太简单了!你的建议很有效,谢谢。我也将尝试下面的Edric方法,但我的问题实际上已经解决了。我将添加它作为一个完整的答案,因为它是有效的:-)我发现在parfor循环中确实有可能“同时”有更多的工作目录。我的原始代码有一个与此无关的问题。谢谢你的回答,但我还是会选择在系统中添加cd
命令,因为我觉得它更干净。