2009-12-09 100 views
-1

我正在尋找一種框架/方法來在C++中執行消息傳遞分佈式計算。簡單分佈式計算(類似於求和)(在C++中)

我目前有一個迭代,單線程算法,增量更新一些數據模型。這些更新從字面上看是疊加的,我希望儘可能多地分配(或至少是並行化)計算。數據模型可以被視爲大量(獨立)浮點值。由於更新都是可加性的(即交換性和關聯性),因此可以以任意順序合併來自其他節點的更新,甚至可以批量合併更新。當涉及申請更新,地圖/減少範例將工​​作正常。

在另一方面,所述更新是計算相對於當前模型狀態。每個步驟都「糾正」了一些缺陷,因此用於計算更新的模型儘可能新鮮(模型越新,更新的用處越小)非常重要。最糟糕的情況是,更新完全依賴,並行性沒有任何好處。

我從來沒有實現過靈活分配的任何東西,但這看起來像是一個主要的候選人。所以,我正在尋找一些框架或方法來分發更新(這些更新主要由浮點數和索引組成,以確定添加更新的位置)。但是,我不確定如何:

  • 我可以向所有連接的進程廣播更新。但這意味着巨大的網絡流量,所以我實際上需要批量更新;然後更新將會更少。無論如何,這看起來不可擴展。
  • 我可以做某種環形拓撲。基本上,一臺機器向下一臺機器發送它自己的更新和它的前輩的更新。但後來我需要弄清楚如何重複更新,畢竟這個環是循環的,最終它自己的更新將作爲其前任總和的一部分到達。
  • 或某種樹結構的...

總括來說,獲得體面的收斂性,低延遲是至關重要的;更新計算和更新應用程序之間的時間越長,更新的用處就越小。更新需要儘快分發給所有節點;但由於更新的交互性和關聯性,這些更新是否單獨廣播(可能效率低下)或作爲合併批次的一部分到達並不重要。

有沒有人知道任何現有的框架或方法來加快發展?甚至只是一般指針?我從來沒有做過這樣的事情......

回答

3

你可能想要MPI(消息傳遞接口)。它本質上是分佈式計算的行業標準。有很多的實現,但我會建議OpenMPI,因爲它是免費的,並高度重視。它提供了一個C API來在節點之間傳遞消息,並且還提供了更高級別的功能,如廣播,全部到全部,減少,分散收集等。它在TCP上工作,以及更快,更低的延遲Infiniband或Myrinet等互連,並支持各種拓撲。

MPI上還有一個Boost包裝器(Boost.MPI),它將爲您提供更多的C++友好界面。

+0

這看起來像一個合理的技術開始。我想批處理/合併方面不是一個解決的問題? – 2009-12-09 14:56:53