2012-06-24 3 views
3

Я хочу разработать планировщик задач с использованием MPI, где есть один главный процессор, и есть рабочие/клиентские процессоры. Каждый рабочий имеет все данные, которые ему нужно вычислить, но получает индекс для работы от мастера. После вычисления рабочий возвращает некоторые данные мастеру. Проблема в том, что некоторые процессы будут быстрыми, а некоторые будут медленными. Если я запустил цикл, чтобы на каждой итерации главный отправляет и получает (блокирует/не блокирует) данные, то он не может перейти к следующему шагу, пока не получит данные от текущего рабочего из предыдущего присвоенного ему индекса. Суть в том, что работник занимает слишком много времени, чтобы вычислить, тогда он становится ограничивающим фактором, и мастер не может перейти к присвоению индекса следующему работнику, даже если используются неблокирующие методы. Можно ли пропустить присвоение работнику и перейти к следующему.Планирование задания MPI

Я начинаю думать, что MPI может и не быть парадигмой для этого. Будет ли python отличной платформой для планирования задач?

+1

LAM/MPI предоставляет [подробный пример] (http://www.lam-mpi.org/tutorials/one-step/ezstart.php) того, что вы хотели бы реализовать. Обратите внимание, что терминология «мастер/ведомый» немного устарела и теперь называется «менеджер/работник» ради политической корректности. –

ответ

3

Это абсолютно возможно с использованием MPI_Irecv() и MPI_Test(). Весь мастер-процесс должен состоять в том, чтобы опубликовать неблокирующий прием для каждого рабочего процесса, а затем в тестовом тесте каждый для входящих данных. Если процесс завершен, отправьте ему новый индекс, опубликуйте новый неблокирующий прием для него и продолжите.

+1

Yikes! Теперь это было просто. Благодаря! – itachi

1

Один MPI_IRecv для каждого процесса является одним из решений. Это имеет недостаток в необходимости отмены непревзойденного MPI_IRecv, когда работа завершена.

MPI_ANY_SOURCE - альтернативный путь. Это позволит диспетчерскому процессу иметь отдельный MPI_IRecv в любой момент времени, а «следующий» процесс в MPI_Send будет согласован с MPI_ANY_SOURCE. Это имеет недостаток нескольких рангов, блокирующих MPI_Send, когда нет дополнительной работы. Должен быть разработан какой-то сигнал «ничего больше делать», поэтому ряды могут сделать чистый выход.

Смежные вопросы