Ожидание при использовании spmd (параллельные вычисления) в Matlab
Я использую spmd
распределить две разные задачи на два процессора компьютера. Код похож на:
spmd
if labindex==1
TASK_ONE;
end
if labindex==2
TASK_TWO;
end
end
Каждая задача открывает файл и обрабатывает его, сохраняя результаты. Цикл продолжается, пока еще есть файлы для обработки. Моя проблема в том что TASK_ONE
имеет меньше файлов для обработки, и когда он заканчивается, код останавливается (он выходит из spmd
блок). Таким образом, TASK_TWO
не заканчивает обработку всех своих файлов. Есть ли способ сделать это spmd
продолжает работать до TASK_TWO
заканчивается, даже если TASK_ONE
уже закончил?
1 ответ
spmd
Блок не может быть завершен, пока не завершены все рабочие, поэтому, если вы видите, что не все файлы обрабатываются, у вас должна быть какая-то другая ошибка в вашем коде. По сути, каждый spmd
блок выполняется так, как если бы он имел вызов labBarrier
в конце.
Вы можете легко увидеть это поведение так:
spmd
if labindex == 1
for idx = 1:10, disp(idx), pause(1), end
end
if labindex == 2
for idx = 1:3, disp(idx), pause(1), end
end
end