Я реализую имитируемый алгоритм отжига в Matlab с использованием spmd. Я буду сравнивать различные типы имплантации. Один из них - асинхронный паралеллизм. Кодекс будет выполнять 12 рабочих. если один из них соответствует критериям (ошибка < 0,01), код остановит поиск. Есть ли какая-нибудь команда для этого? Если я использую labBroadcast или labsend/labreceive, это будет синхронный.Matlab Spmd Termination
0
A
ответ
0
Я начал бы все 12 процессов, используя рабочие места. Вы можете проверить, соответствует ли одно из уже завершенных заданий вашим критериям, а затем отменить другие задания.
http://www.mathworks.com/help/distcomp/cancel.html http://www.mathworks.com/help/distcomp/create-simple-independent-jobs.html
1
В дополнение к @ предложению Даниила, в 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