甚至工作分配算法

时间:2011-07-30 13:57:56

标签: algorithm mpi master-slave

关于工作平衡的快速问题。

并行编程处理文件。让我们说文件的大小是衡量处理它需要多长时间的近似指标。所有文件都是事先知道的。

我们有N个节点可以处理文件。如何分发这些文件,以便每个节点最接近平均工作量。

理念是微不足道的,我有几个想法,但它似乎已经存在的最佳解决方案似乎是一些经典问题。
我只是不知道它叫什么。

有人知道吗?

谢谢!

编辑: 好的,对不起,我省略了很多信息。我正在开发MPI实现。标准主从系统。一个主节点检查目标目录,拾取需要处理的文件,然后将文件分配给从属MPI任务,以便它们可以并行执行。

从属节点的数量小于32 目标文件的数量小于10000.

4 个答案:

答案 0 :(得分:2)

您正在询问经典的多处理器调度问题。维基百科文章是算法基本概述(http://en.wikipedia.org/wiki/Multiprocessor_scheduling)的良好开端。

答案 1 :(得分:1)

这是一个想法。按降序对(文件名,大小)对进行排序。然后,从最大的文件开始,将每个文件分配给文件累积权重最低的节点(根据需要断开连接)。 “一个为我,一个为你”的方法。

采取O(MlogM)来排序M文件记录和O(M * N)分配(有人仔细检查这个),但我认为算法给出了良好 - 最佳? - 结果。

编辑:在检查了另一张海报提供的链接后,结果证明这是LPT方法,它在P中,但在使平均尺寸尽可能接近方面不是最佳的。

答案 2 :(得分:0)

我一直experimenting with parallelising reduction functions使用递归除法&征服算法并确定提交给节点的作业数量满足不等式

l >= n / P^2

其中l是作业的数量,n是原始工作负载的大小,P是“节点”,工作者,处理器的数量,以及您想要调用它们的任何内容。

对于大多数计算机上的情况和移动设备n将比P大许多个数量级。您希望确保单个作业的数量不会太大,以至于您将所有时间用于将它们分开并发送给工作人员。

答案 3 :(得分:0)

如果事先已知(可估计)所有工作单位长度,这基本上成为装箱问题(https://en.wikipedia.org/wiki/Bin_packing_problem)。这可以通过“第一次拟合”和“最佳拟合”算法启发式解决(参见链接)。