请求特定的MATLAB工作人员在parfor之前做一些事情?

时间:2014-07-03 14:11:17

标签: matlab

我刚刚开始使用MATLAB并行计算,更具体地说是parfor。基本上,我需要在并行计算开始之前通过端口号将每个MATLAB工作器连接到一个外部程序(实际上是COMSOL),因为计算需要外部程序。

总而言之,我有10个工人,10个端口(9001 - 9010)和10个外部程序。在进入parfor之前,我必须通过其中一个端口将每个作品连接到其中一个程序。即,

no_workers = 10;
matlabpool open no_workers;

for idx = 1:1:no_workers
    port_no = 9000+idx;
    connect(worker_ID, program_ID, port_no); % how???
end

% computation starts
parfor idx = 1:1:no_workers
    compute();
end

matlabpool close;

我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

这就是我期望程序看起来像,但不幸的是我不能自己尝试:

no_workers = 10;
matlabpool open no_workers;

parfor idx = 1:1:no_workers
    port_no = 9000+idx;
    connect(worker_ID, program_ID, port_no); % how???
    compute();
end

matlabpool close;

答案 1 :(得分:0)

上面的PARFOR解决方案可能会有效,但您可以确定并使用spmdlabindex

spmd
    port_no = 9000 + labindex;
    connect(...);
end

如果" connect"方法返回一个连接对象,你可以使用Worker Object Wrapper来保持它并将其传递给后续的parfor循环。你这样做是这样的:

spmd
    c = connect(...);
end

% build the wrapper
w = WorkerObjWrapper(c);

% use the wrapper inside PARFOR
parfor idx = 1:N
    useConnection(w.Value);
end

% disconnect at the end.
spmd
    disconnect(w.Value);
end