我正在使用spmd在matlab中实现模拟退火算法。我将比较不同的实现类型。其中之一是异步并行。 12名工人将运行代码。如果其中一个符合标准(错误<0.01),代码将停止搜索。 有没有命令要这样做? 如果我使用labBroadcast或labsend / labreceive,它将是同步的。
答案 0 :(得分:1)
继@ Daniel的建议之后,在MATLAB发布R2013b及更高版本中,您可以使用parfeval
来执行此操作。像这样:
% First, kick off the asynchronous work:
N = 12;
for idx = 1:N
f(idx) = parfeval(@myFcn, 1, args);
end
% Next, consume the results
for idx = 1:N
% fetchNext blocks until one of 'f' has completed,
% returning the index into 'f' that completed, as
% well as the result.
[idxInF, result] = fetchNext(f);
if result < 0.01
% we're done!
cancel(f); % Cancel all outstanding work
break; % stop looping and calling fetchNext
end
end
答案 1 :(得分:0)
我会使用作业启动所有12个进程。您可以检查其中一个已完成的作业是否符合您的条件,然后取消其他作业。
http://www.mathworks.com/help/distcomp/cancel.html http://www.mathworks.com/help/distcomp/create-simple-independent-jobs.html