MPI - общая очередь между процессами - PullRequest
2 голосов
/ 24 января 2020

У меня есть программа MPI, в которой главный узел ожидает, пока не будет выполнено определенное количество задач (скажем, 1000) подчиненными узлами. Подчиненные узлы через некоторое время (True) l oop продолжают генерировать выходные данные из своих задач. Время выполнения этих задач может варьироваться в зависимости от задач и узлов, поэтому, если есть 2 подчиненных узла, и мастер должен ждать, скажем, 1000 задач, то подчиненный узел-1 мог бы выполнить 450 задач, а подчиненный узел-2 - остальные 550. .

Каков наилучший способ для подчиненных узлов «сообщить» главному узлу, что в общей сложности 1000 задач были выполнены? Мне кажется, что мне нужна какая-то общая очередь для всех процессов, где ведомые могут собирать данные sh после выполнения своей задачи, и мастер просто опрашивает размер этой очереди, пока он не достигнет 1000. Впоследствии мастер может использовать данные из этой очереди, чтобы сбросить размер очереди для подчиненных, чтобы заполнить больше данных.

1 Ответ

2 голосов
/ 24 января 2020

Я бы порекомендовал два решения.

Первое, как указал Жиль, - это использовать MPI_ANY_SOURCE для получения 1000 сообщений о завершении, которые могут быть отправлены любым из рабочих.

Второе использовать MPI_ACCUMULATE. В этом случае главный узел совместно использует окно, которое инициализируется равным 0, затем каждый работник использует MPI_ACCUMULATE, чтобы увеличивать значение в окне после завершения каждой задачи. Мастер опрашивает свое собственное локальное окно, пока не достигнет 1000.

В этом случае я бы придерживался MPI_ANY_SOURCE, а не связывался с созданием и уничтожением windows. Я не думаю, что есть веская причина, чтобы добавить эту сложность здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...