如何将许多可变大小的工作单元拆分为大小相等的桶?

How do I split many variable-sized units of work into equal sized buckets?

假设我有 300-400 个工作单元,所有单元的尺寸都不同,在某些情况下尺寸差异非常大。是否可以将它们分成固定数量的桶,以便我可以在固定数量的工作线程之间平衡负载?

您描述的问题称为多处理器调度问题(类似于装箱问题,后者是背包问题的概括)。已知寻找最佳调度是 NP-hard。因此,没有找到最佳调度的已知多项式时间算法。

一个简单的启发式(非最佳)算法是最长的处理时间:

  • 对工作单元进行排序,最大的在前
  • 对于每个单元,放入最早结束时间的桶