0

我正在尝试通过使用 Mathworks 的 ParralelToolbox 来加速我们的测试环境。但是我无法并行启动多个 Matlab 实例(到目前为止,我们按顺序运行测试,每个测试都通过 ActX 服务器启动一个新的 Matlab 实例)。所以当我在下面运行以下代码时

ML=ver('Matlab');
ML_Path=matlabroot;
ML_Ver=ML.Version;
parfor i = 1:3
    NewMatlab = actxserver(['matlab.application.single.',ML_Ver])
    Answer = NewMatlab.Feval('test',1);
    NewMatlab.Quit;
    NewMatlab.release;
end

Matlab 实例是按顺序调用的(测试只是一个非常简单的脚本,它总结了几个数字)。

但是,如果我通过命令行启动一个新的 Matlab

ML=ver('Matlab');
ML_Path=matlabroot;
ML_Ver=ML.Version;
parfor i = 1:3
    dos('matlab -nodesktop -minimize -wait -batch "test"');
end

有用。我看到这两种方法在启动 Matlab 的处理上有很大的不同,但第一种方法是

4

1 回答 1

1

如果您希望您的每次迭代test都在一个完全独立的 MATLAB 实例中运行,您可以使用该batch函数,如下所示:

for i = 1:3
    j(i) = batch(@test, nOut, {argsIn...});
end
% Later, collect results
for i = 1:3
    wait(j(i)), fetchOutputs(j(i))
end

或者,您可以直接parfor使用

parpool() % If necessary
parfor i = 1:3
    out{i} = test(...)
end

(您只需要在parpool当前没有池子打开的情况下调用,并且您已经设置了您的首选项,以便在您点击 时不会自动创建池子parfor)。

于 2020-04-20T09:26:44.683 回答