Ожидание при использовании 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
Другие вопросы по тегам