Широковещательное сообщение для всех процессов о выходе (MPI)

[MPi-С++]

Я сделал приложение, которое при определенном условии должно закрыть приложение во всех процессах. Я попытался сделать это с помощью корневого процесса, но я хочу отправить сообщение всем другим процессам, чтобы они также завершились. Как я могу это сделать???


person Sameh Shohdy    schedule 03.07.2012    source источник


Ответы (1)


Невозможно закрыть приложение MPI чисто во всех процессах без связи. Это означает, что если у вас есть условие, которое возникает только в подмножестве процессов вашего приложения MPI (например, у вас есть ошибка в одном из процессов), единственный способ в одностороннем порядке выйти из приложения — это вызвать MPI_Abort. Это приведет к внезапному завершению всех процессов MPI, независимо от того, где в коде каждый ранг находился в этот момент. Поскольку MPI_Abort не является коллективной подпрограммой, невозможно выполнить какую-либо очистку любого из других рангов.

Если вы хотите иметь чистый выход, вам нужно регулярно общаться между всеми рангами, все ли еще работает на всех рангах, или пришло время выйти. Например, вы можете регулярно вызывать MPI_Allreduce с MPI_SUM в качестве операции. Если ваше условие выхода выполнено для процесса, заставьте его отправлять 1 в качестве данных, в противном случае заставьте его отправлять 0. Теперь вам нужно только проверить после MPI_Allreduce, больше ли сумма, чем 0, и если это так, выйти из приложения в установленном порядке.

person Michael Schlottke-Lakemper    schedule 04.07.2012