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
Другие вопросы по тегам