【问题标题】:Tree Design for Parallel Traversal并行遍历的树设计
【发布时间】:2015-04-24 05:33:35
【问题描述】:

我正在开展一个项目,该项目涉及遍历计算节点集群中的大型不平衡树。树将在集群之间进行划分。但是,很快就会出现负载不平衡,我会调用负载均衡器来执行必要的迁移。我很难为树提出一个允许并行遍历和简化数据分区的良好设计。

编辑:数据分布和迁移发生在预定大小的块中(块大小是块中没有节点)。我需要弄清楚如何对树进行分块,以便每个块都包含可以在单个进程中遍历的数据。

【问题讨论】:

  • 左右子树并行遍历应该没有问题。我错过了什么吗?

标签: algorithm parallel-processing load-balancing tree-traversal


【解决方案1】:

假设一棵具有(大)节点数 T 的树,并且该树是静态的。

很可能整个子树对于“保留”和处理为块很有用。我很想选择块大小为 K 的叶子树(想想一个大三角形),然后是大小为 K 的内部树,直到树被这样的三角形平铺。您显然希望 K 足够大,以便在三角形上工作是有效的,尤其是。与跨越三角形边缘(父节点和所有子节点)的通信成本相比,您希望它足够小,因此三角形的数量比计算节点 N 多得多。

一个有趣的问题是知道三角形之间会发生多少通信。我假设通过三角形树根的通信量与三角形中每个叶子的通信成本大致相同。

我们最终得到 T/K 三角形。假设它们是根据树的前缀游走编号的,所以最左边的三角形为零,其父三角形为 1,等等。

您可以将所有模数为 N 等于 n 的三角形分布到节点 n。

你可能会优化一下。您可以将最左边的 P=(T/K)/N 三角形发送到节点 0,将下一个 P 发送到节点 1,......大概这可以将三角形边界之间的通信保持在最低限度,因为每个节点都拥有尽可能大的连续块尽可能的树。如果通过三角根的通信量明显大于通过叶子的通信量,这也将有所帮助。毕竟,您可以在树上上下发送大量摘要。

您仍然希望处理大小为 K 的块,因为您希望以一种在所有节点上平均分配的方式分配工作。

并行计算中使用的一个标准技巧是完全复制所有数据。也就是说,如果它不是巨大的,您可以将整个树发送到每个计算节点。然后每个节点可以根据上面的规则来决定它要处理树的哪一部分,但是当它需要查看不属于它的树的一部分时,它可以避免通信。

【讨论】:

  • 感谢您的详细解释。这不是静态负载均衡吗?我需要模拟动态负载不平衡来测试负载平衡器。但这确实给了我一些方向。
  • 它是静态分区,试图平衡负载,是的,使用适度大小的树,以便每个节点在切换之前只做适度的工作。您可以在此基础上构建负载均衡器:当某个节点先于其他节点耗尽工作时,它可能会“偷走”其中一棵树。
猜你喜欢
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 2020-04-05
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多