MATLAB:并行运行 .bat:可能有多个工作目录?
MATLAB: Running a .bat in parallel: multiple working directories possible?
我在 Matlab 2013a 的 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()
命令创建的进程中更改目录 - 这很好,因为它是一个新的、不同的进程,它可以有自己的目录。
像这样:
system('cd somewhere & C:\SIMPACK...');
我在 Matlab 2013a 的 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()
命令创建的进程中更改目录 - 这很好,因为它是一个新的、不同的进程,它可以有自己的目录。
像这样:
system('cd somewhere & C:\SIMPACK...');