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