2012-07-03 146 views
0

[MPI-C++]廣播消息退出(MPI)

我提出,在特定條件下它應關閉中的所有進程的應用程序的應用程序。 我試圖使用root進程,但我想發送消息到所有其他進程也終止。我怎樣才能做到這一點?

回答

1

無法退出MPI應用程序乾淨所有進程沒有通信。這意味着,如果您的條件只發生在MPI應用程序的一部分進程中(例如,您在其中一個進程中出現錯誤),則單方面退出應用程序的唯一方法是致電MPI_Abort。這將導致所有MPI流程突然結束,無論當時每個級別的代碼在哪裏。由於MPI_Abort不是一項集體例行公事,所以不可能對任何其他職級進行清理。

如果您希望有一個乾淨的退出,您需要定期在所有級別之間進行溝通,無論所有級別的所有工作是否仍在進行,或者是否應該退出。例如,您可以定期致電MPI_Allreduce並以MPI_SUM作爲操作。如果您的退出條件在某個過程中得到滿足,請發送1作爲數據,否則請發送0。現在只需在MPI_Allreduce之後檢查總和是否大於0,如果是,請按順序退出應用程序。