2012-01-25 161 views
1

我正在使用MPI應用程序,它在進程之間使用線程化MPI調用。根據負載要求添加和刪除線程。現在,我有一個問題,在open-mpi論壇中找不到答案。MPI:多少個插座?

如果一組MPI進程(「等級」)已經有一個連接,即它們已經在進行發送 - 接收調用,然後一個新的線程進入(進程)也進行發送 - 接收調用在相同的MPI同行之間,MPI是否會開放新的套接字?

我知道細節是依賴於實現的,所以可能沒有一個普遍的答案。但是,有沒有辦法找出答案?

這項技術的可擴展性存在問題,這是由於其他原因選擇的。獲得一些統計數據,每個連接的新套接字數量將會非常好。

任何人都知道如何做到這一點?例如,查詢哪個套接字是MPI_Send寫入的特定實例?

我已經嘗試添加--mca btl self,sm,tcp --mca btl_base_verbose 30 -v -report-pid -display-map -report-bindings -leave-session-attached

非常感謝。

回答

1

要回答我的問題,這裏是我在開MPI從輝煌的人瞭解到:

在2012年1月24日,在下午5時34分,德文德拉·萊寫道:

我我試圖找出在發送消息時MPI打開了多少個單獨的連接。基本上,我已經對一些不同的MPI進程進行了線程化MPI調用(這些進程又有線程化的MPI調用)。

問題是,每添加一個線程,都會打開新的端口(即使發送方 - 接收方對之間已經有連接)?

在Open MPI:no。底層連接與您有多少個線程無關。

有沒有什麼辦法可以找出答案?我使用了MPI API,而且我發現的最接近的是與製圖信息有關。這是不夠的,因爲這隻告訴我邏輯連接(或者是否)?

MPI沒有連接的用戶級概念。你發送一條消息,發生奇蹟,並在另一邊收到消息。 MPI沒有說明它是如何到達那裏的(例如,它甚至可能通過其他一些流程發送)。

閱讀開放MPI常見問題,我想加入 「--mca BTL自我,SM,TCP --mca btl_base_verbose 30 -display-圖」 的mpirun會有所幫助。但我沒有得到我需要的東西。基本上,我想知道每個進程訪問多少個端口(讀取和寫入)。

對於開放式MPI的TCP實現,它基本上是每個對等點的一個TCP套接字(加上一些其他的實用程序fd)。但是,TCP套接字只是懶惰地打開,這意味着我們不會打開套接字,直到您真正發送給對等端。

- 傑夫斯奎爾斯

積分傑夫·斯奎爾斯。