MPI распределенная, неупорядоченная работа

Я хотел бы написать программу MPI, в которой мастер-поток непрерывно представляет рабочим новую работу (т.е. не только в начале, как в шаблоне MapReduce).

Первоначально, допустим, я подаю 100 рабочих мест на 100 рабочих.

Затем я хотел бы получить уведомление, когда работник заканчивает работу. Я бы отправил следующую работу, параметры которой зависят от всех полученных результатов. Порядок результатов не должен быть сохранен, мне просто нужно, чтобы они заканчивались.

Я могу работать с C / C ++ / Python.

Из документации кажется, что я могу транслировать N заданий и собирать результаты. Но это не то, что мне нужно, так как у меня не все они доступны, и сбор будет блокировать. По сути, я ищу асинхронный вызов recv для любого рабочего.

1

Решение

Ты можешь использовать MPI_ANY_SOURCE а также MPI_ANY_TAG для получения из любого места. После получения вы можете прочитать информацию (источник и тег) из MPI_Status структура, которая должна быть передана в вызов MPI_Recv.

Если вы используете это, вам не нужно никакой асинхронной связи, так как мастер «слушает» всех, кто запрашивает новые задания и возвращает результаты; и каждый раб выполняет свою задачу, а затем отправляет результат мастеру, запрашивает новую работу и ждет ответа от мастера.

Вам вообще не нужно работать с scatter / collect, так как они предназначены для использования с массивом данных, и ваша проблема, похоже, имеет более или менее независимые задачи.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]