我正在寻找一种框架/方法来在C++中执行消息传递分布式计算。简单分布式计算(类似于求和)(在C++中)
我目前有一个迭代,单线程算法,增量更新一些数据模型。这些更新从字面上看是叠加的,我希望尽可能多地分配(或至少是并行化)计算。数据模型可以被视为大量(独立)浮点值。由于更新都是可加性的(即交换性和关联性),因此可以以任意顺序合并来自其他节点的更新,甚至可以批量合并更新。当涉及申请更新,地图/减少范例将工作正常。
在另一方面,所述更新是计算相对于当前模型状态。每个步骤都“纠正”了一些缺陷,因此用于计算更新的模型尽可能新鲜(模型越新,更新的用处越小)非常重要。最糟糕的情况是,更新完全依赖,并行性没有任何好处。
我从来没有实现过灵活分配的任何东西,但这看起来像是一个主要的候选人。所以,我正在寻找一些框架或方法来分发更新(这些更新主要由浮点数和索引组成,以确定添加更新的位置)。但是,我不确定如何:
- 我可以向所有连接的进程广播更新。但这意味着巨大的网络流量,所以我实际上需要批量更新;然后更新将会更少。无论如何,这看起来不可扩展。
- 我可以做某种环形拓扑。基本上,一台机器向下一台机器发送它自己的更新和它的前辈的更新。但后来我需要弄清楚如何重复更新,毕竟这个环是循环的,最终它自己的更新将作为其前任总和的一部分到达。
- 或某种树结构的...
总括来说,获得体面的收敛性,低延迟是至关重要的;更新计算和更新应用程序之间的时间越长,更新的用处就越小。更新需要尽快分发给所有节点;但由于更新的交互性和关联性,这些更新是否单独广播(可能效率低下)或作为合并批次的一部分到达并不重要。
有没有人知道任何现有的框架或方法来加快发展?甚至只是一般指针?我从来没有做过这样的事情......
这看起来像一个合理的技术开始。我想批处理/合并方面不是一个解决的问题? – 2009-12-09 14:56:53