2017-04-12 51 views
0

我正在學習有關在課堂上使用C的MPI。我目前正在努力讓自己的頭腦在使用MPI_Comm_split時具有優勢。我還試圖弄清楚如果我不使用組或者如果我的所有進程都在一個組中,那麼使用此方法是否有任何好處。MPI Communicator MPI_Comm_split without Groups

據我所知,MPI_Comm_split爲每個'顏色'提供了一個獨特的溝通者,這是不同於使用MPI_COMM_WORLD(不知道這最後一部分是否正確)。 MPI小組是一組過程,傳播者可以幫助你在這些小組內部和小組之間進行交流。

我上this question

例如着眼於評論,給定的形狀例如平方,程序將 MPI_COMM_WORLD分成兩組grpArea和grpPerimeter,計算給定形狀的面積和周長。這些組應該執行 其私有計算並將結果返回到根目錄(等級0) MPI_COMM_WORLD。

假設我們不是計算面積和周長,而是計算面積,所以我們不使用組。使用MPI_Comm_split來分裂傳播者是否有任何意義,以便每個處理器都有自己的傳播者?這樣做有什麼好處或缺點嗎?

回答

2

你基本上是問,使用MPI_Comm_split而沒有不同的組是否合理。不,不是的。它沒有提供任何好處或者沒有任何意義。

它可以有兩個原因是使用相同的組的單獨的通信器有用:

  • 私人傳播者在應用程序的不同模塊可以具有重疊的標籤。這樣,你確保沒有不匹配。對於這種情況,請使用MPI_Comm_dup
  • 使用拓撲。在這種情況下,使用適當的構造函數,例如MPI_Cart_create

創建多餘的通信器可能會有一些開銷。此外,您可能會失去針對MPI_COMM_WORLD的特定優化。這不應該阻止你使用傳播者時,它是有道理的。