我正在尋找一種框架/方法來在C++中執行消息傳遞分佈式計算。簡單分佈式計算(類似於求和)(在C++中)
我目前有一個迭代,單線程算法,增量更新一些數據模型。這些更新從字面上看是疊加的,我希望儘可能多地分配(或至少是並行化)計算。數據模型可以被視爲大量(獨立)浮點值。由於更新都是可加性的(即交換性和關聯性),因此可以以任意順序合併來自其他節點的更新,甚至可以批量合併更新。當涉及申請更新,地圖/減少範例將工作正常。
在另一方面,所述更新是計算相對於當前模型狀態。每個步驟都「糾正」了一些缺陷,因此用於計算更新的模型儘可能新鮮(模型越新,更新的用處越小)非常重要。最糟糕的情況是,更新完全依賴,並行性沒有任何好處。
我從來沒有實現過靈活分配的任何東西,但這看起來像是一個主要的候選人。所以,我正在尋找一些框架或方法來分發更新(這些更新主要由浮點數和索引組成,以確定添加更新的位置)。但是,我不確定如何:
- 我可以向所有連接的進程廣播更新。但這意味着巨大的網絡流量,所以我實際上需要批量更新;然後更新將會更少。無論如何,這看起來不可擴展。
- 我可以做某種環形拓撲。基本上,一臺機器向下一臺機器發送它自己的更新和它的前輩的更新。但後來我需要弄清楚如何重複更新,畢竟這個環是循環的,最終它自己的更新將作爲其前任總和的一部分到達。
- 或某種樹結構的...
總括來說,獲得體面的收斂性,低延遲是至關重要的;更新計算和更新應用程序之間的時間越長,更新的用處就越小。更新需要儘快分發給所有節點;但由於更新的交互性和關聯性,這些更新是否單獨廣播(可能效率低下)或作爲合併批次的一部分到達並不重要。
有沒有人知道任何現有的框架或方法來加快發展?甚至只是一般指針?我從來沒有做過這樣的事情......
這看起來像一個合理的技術開始。我想批處理/合併方面不是一個解決的問題? – 2009-12-09 14:56:53