使用 Matlab 进行并行计算

Parallel computing using Matlab

我正在 'cmd' 提示符下执行 windows '.exe' 文件以通过 Matlab 进行各种输入。命令如下。

   for i = 1:n
      filename = sprintf('input_%d.dat',i);
      string = sprintf('!sfbox.exe %s', filename);
      eval(string)
   end

所有输入文件都存在并且彼此独立。但是,如果我尝试使用 'parfor' 并行执行,如下所示,

   parfor i = 1:n
      filename = sprintf('input_%d.dat',i);
      string = sprintf('!sfbox.exe %s', filename);
      eval(string)
   end

我得到了一个错误,但是代码 运行 连续不断

   Explanation 

   MATLAB runs parfor loops on multiple MATLAB workers that have
   multiple workspaces. The indicated function might not access the 
   correct workspace; therefore, its usage is invalid.

是否有使用 parfor 执行 eval 的正确方法?

(PS: 我尝试在 cmd 提示符下手动执行多个 .exe 文件,在命令提示符下同时 运行 多个 .exe 文件是可行的。问题是我尝试的方式在Matlab中做。请提出更好的方法。)

您遇到了 Matlab 的问题,不知道 eval 实际在做什么。虽然您知道它在做正确的事情,但 eval 命令可以执行任何操作。 transparency issues using eval statements in parfor and spmd statements.

上有一些文档

改用 feval 语句应该可以解决您的问题,因为 Matlab 知道进入该语句的唯一内容是字符串。更直接的,可以使用system命令直接在matlab的cmd提示符下执行任意字符串

parfor i = 1:n
    filename = sprintf('input_%d.dat',i);
    string = sprintf('sfbox.exe %s', filename);
    system(string);
end