c++ - 分配算法

标签 c++ grid variable-assignment hpc

我需要将 N 个实体(每个实体都有可能的 parent 和可能的 child )分配给 M 个计算节点,同时满足以下优化条件:

  1. 一个实体的子节点希望被分配到同一个计算节点(以最大化兄弟节点之间的数据局部性)
  2. 实体的分布应尽可能均匀(即不要让单个节点负担过重)。

我正在寻找一些关于启发式方法的建议来解决这个问题。

我读过 http://en.wikipedia.org/wiki/Assignment%5Fproblem .

谢谢。

最佳答案

我不确定 1 是否是硬性要求。如果是这样,作为第一步,您应该将您的实体分组到 connected components 中。 .如果不是,您应该指定 1 和 2 之间的折衷是什么,例如作为成本函数。

将组件放置在计算节点上是 binpacking problem ,如果您将每个节点限制为 N/M 个实体。一个很好的近似是以下算法:

  1. 按实体数量降序排列组件
  2. 只要每个节点仍有可用容量,就将它们放置在节点上
  3. 完成 2 后,您可能有尚未放置的组件。将它们放在迄今为止负载最小的节点上。

关于c++ - 分配算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1283644/

相关文章:

c++ - 段错误 C++

android - Android 中相当于 WPF Grid 的控件

variable-assignment - XSLTforms 或 betterForm 是否支持变量 (var)?

css - 如何在 MUI 网格中有不同的水平和垂直间距?

javascript - 为什么无法使用 const 关键字为 JavaScript 对象分配常量属性?

c++ - 数组赋值不适用于指针语法

c++ - 如何从 Lua 调用 C++ DLL 中的函数?

c++ - 使用二进制 write() read() 将 vector <char> 作为流连接

C++ 编译器不检测类模板中的错误

Java:2D 世界碰撞检测代码错误