2010-11-06 54 views
7

美好的一天!Boost.MPI vs Boost.Asio

這些庫有什麼區別?

我閱讀MPI的文檔,並有asio的小經驗。對我來說,它與網絡通信的實現不同,不再有其他的 。

但是他們每個人都引入了不同的抽象(我不確定這些抽象的同級 ),這導致了不同的應用程序設計。

當我應該使用一個庫或其他?在每個單獨的情況下選擇正確的 決定,我必須知道什麼?

是,短耳好幾個節點(和一般很一般的框架),但爲什麼MPI是這樣的任務少用爲妙?我不認爲對MPI C庫的依賴是限制性的,或者MPI很難理解,可擴展性如何?藉助Asio,我們可以實現廣播和其他方面的事情,而另一方面,MPI不禁止編寫簡單的網絡應用程序。如果需要,用MPI重寫Asio專用邏輯在概念上很難嗎?

什麼類似插座的通信:如果是強制性的,我們可以封裝這樣一個在短耳或任何其他框架模塊,並仍然使用MPI進行其它通信。

對我來說sokets和MPI非標準是不同的網絡服務,它不是明確什麼是在現實世界中,根本其中從簡單的客戶端 - 服務器對一些媒體的計算距離的一個步驟。我也不認爲MPI與Asio相比有明顯的開銷。

也許是壞的問題,我們需要的是像ICE(互聯網通信引擎)?不同的語言支持並再次(保證ZeroC)卓越的性能。

,當然,我從來沒有像「不要使用這個庫了!」任何文檔主題見過。

我根本無法採取這種不統一:在一個情況下,它的插座,在另一 - 異步消息終於重中間件平臺。發展生命週期的清晰程度在哪裏?也許這不是一個公平的問題,但是爲了減少這個動物園,我們需要一些觀點。

回答

3

我還沒有使用過它們兩個,但Boost.ASIO更像是一個低層網絡的抽象層,而Boost.MPI實現了MPI標準,可以讓你創建分佈式計算系統。

所以,如果你需要一些,比如套接字式的溝通,我會和ASIO一起去。如果你想做分佈式計算,甚至可以與其他語言/其他平臺上編寫的MPI程序進行互操作,請使用Boost.MPI。

5

每個圖書館都解決了不同的問題,它們並不真正重疊。這也取決於你想要解決什麼,以及你的應用程序的通信模式。使用Boost.MPI來實現可伸縮性,例如縮放至數千或數萬個節點。取決於底層網絡體系結構,MPI在集體操作方面也很出色:收集,分散,廣播等。

如果您只需要少量節點(如單個服務器和某些客戶端),則使用Boost.Asio作爲套接字抽象層。我建議使用Boost.Asio,如果你還沒有以某種方式使用MPI發行版。