在Matlab中并行执行COM实例



我正试图通过使用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时有很大的不同,但第一种方法是

如果您希望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

(如果当前没有打开任何池,并且您已经设置了首选项,因此当您点击parfor时不会自动创建池,则只需要调用parpool。(。

最新更新