當此調用過程中的進程數與計算開始時產生的進程數不同時,Bcast的語義是什麼?MPI Bcast和進程數
我需要處理用戶指定執行計算所需的過多進程的情況。例如,用戶可能決定用mpirun
產生16個進程,當我只需要12個進程在進程間分割問題時。我在處理這種情況時,通過將PID與12進行比較,並在PID過高時用MPI_Finalize結束進程。我認爲這會導致我的應用程序出現死鎖,因爲Bcast想要發送到所有進程?
如何處理?我應該在所有進程中調用Bcast,但只是忽略某些輸出?
當此調用過程中的進程數與計算開始時產生的進程數不同時,Bcast的語義是什麼?MPI Bcast和進程數
我需要處理用戶指定執行計算所需的過多進程的情況。例如,用戶可能決定用mpirun
產生16個進程,當我只需要12個進程在進程間分割問題時。我在處理這種情況時,通過將PID與12進行比較,並在PID過高時用MPI_Finalize結束進程。我認爲這會導致我的應用程序出現死鎖,因爲Bcast想要發送到所有進程?
如何處理?我應該在所有進程中調用Bcast,但只是忽略某些輸出?
鑑於我們收到了什麼可以考慮的來自用戶的無效輸入,我們是否真的應該在實現這個之後繼續執行程序?向用戶顯示一條錯誤消息是不是更好,它說請求了一個無效數量的進程,並且還通知用戶有關允許的時間間隔(例如,「請求了16個進程,但最大進程數是12 ,該程序現在將退出「)。否則,如果在您的情況下這不是一個可行的解決方案,則MPI 2.2 documentation中的第6章「組,上下文,通信器和緩存」和/或第10章「流程創建和管理」可能會有所幫助。在其他地方可能有其他更容易閱讀的文檔,但至少這是一個開始。
在程序啓動時,每個進程都應該查看自己的排名(來自MPI_Comm_rank
),進程總數(來自MPI_Comm_size(MPI_COMM_WORLD)
)以及計算實際需要的數量。在你需要的數量之下創建一個新的溝通者,你將實際用來做你的工作,並讓所有剩下的職位只需撥打MPI_Finalize
。
這是一個家庭作業問題,關於這個特殊情況的規範不明確:) – jsmith 2011-06-10 11:21:54
你是什麼意思的「這個特殊情況」?你的意思是第一個問題:「當進程的數量是多少時,Bcast的語義是什麼......」? – cic 2011-06-10 11:32:01