我刚刚开始使用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;
我怎么能这样做?
答案 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解决方案可能会有效,但您可以确定并使用spmd
和labindex
。
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