問題是這個程序是否正確?MPI通訊器管理
可以說我想分割MPI_COMM_WORLD
中的所有p
進程到幾個不重疊的通信器中。 我通過確定排名爲master
的m
組來完成此操作。主級別確定哪些進程需要通信,哪些不需要(基本上分析圖)。
最後,master
排名已確定這些m
流程排名與我想要建立m
溝通。 可以說我把這些m
排名組的結果發送到所有進程。
正如我發現的是,在MPI_COMM_WORLD所有流程需要使所有這些團體與MPI_Group_?
命令(即使他們不屬於該組,(愚蠢?)),之後用MPI_Comm_create
共同創建的每個Communicator。
現在的問題是:什麼是一個過程都與其所不屬於和一些並不需要通過這個過程中所有的傳播者,但他們需要調用m
-times集體MPI_Comm_create
功能?
我們可以簡單地忽略所有的MPI_Comm
指針,只存儲這個進程所屬的指針嗎?,不需要撥打MPI_Comm_free
? 如果我想重建另一組傳播者,我應該如何釋放傳播者? 一個進程是否應該釋放它所屬的通訊器?
有人可以解釋這個過程是否正確? 我有點不確定這個集體創作例程...
非常感謝!
很好的答案,但它並沒有真正幫助我的問題。我知道我可以用這個功能分割,如果我可以在這種情況下使用這個功能,我不能,我正在考慮上述提到的問題,我不確定如何創建和釋放傳播者 – Gabriel
我想我不明白爲什麼你需要創建一個額外的傳播者羣。 –
是不是MPI_Comm_create是集體的,所有進程都需要調用這個函數來創建一個新的通信器,即使它不屬於新的通信器,這就是奇怪的地方! – Gabriel