2012-04-25 65 views
3

秩數是否有任何泛化的數字?對於我的代碼,我想創建MPI :: COMM_WORLD的分層分解。假設我們使用16個線程。我使用MPI :: COMM_WORLD.Split來創建4個具有4個等級的傳播者。現在是否有MPI功能爲相應的四個組提供一些獨特的ID?將MPI等級數推廣到MPI組?

回答

5

那麼,你仍然可以參考每個進程的原始排名MPI_COMM_WORLD。您還可以完全控制每個進程通過colorkey參數MPI_Comm_split()在其新通訊器中收到的排名。這是足夠的信息來創建舊隊伍和新隊伍/隊伍之間的映射。

+0

你說得對,我添加到MPI_Comm_split()中的信息足以計算出我所要求的信息。但在10,000個核心的情況下做這件事並不是微不足道的。這就是我直接在MPI基礎上詢問是否有支持這樣做的原因。 – 2012-04-25 13:28:38

+2

似乎對我來說很簡單。如果你有N * M個進程需要分成M個N組,那麼每個進程都會用'rank/N'顏色(和可選的'rank%N'鍵)調用'Split()'。這會將0..N-1排入組0,N..2 * N-1排入組1,依此類推,並保留每個組內進程的原始排序。在'j'組中排名爲'i'的進程是'MPI_COMM_WORLD'中排名爲'j * N + i'的進程。 – suszterpatt 2012-04-25 13:34:50

1

如果你不喜歡@ suszterpatt的答案(我這樣做),你總是可能會濫用笛卡爾傳播者,並假裝傳播者中索引(2,3)處的流程是分層分解的第2組中的流程3。

但是不要讀這個,並帶走我推薦這種濫用的印象,這只是一個想法。