2015-07-23 1 views
0

Я реализую имитируемый алгоритм отжига в Matlab с использованием spmd. Я буду сравнивать различные типы имплантации. Один из них - асинхронный паралеллизм. Кодекс будет выполнять 12 рабочих. если один из них соответствует критериям (ошибка < 0,01), код остановит поиск. Есть ли какая-нибудь команда для этого? Если я использую labBroadcast или labsend/labreceive, это будет синхронный.Matlab Spmd Termination

ответ

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