关于工作平衡的快速问题。
并行编程处理文件。让我们说文件的大小是衡量处理它需要多长时间的近似指标。所有文件都是事先知道的。
我们有N个节点可以处理文件。如何分发这些文件,以便每个节点最接近平均工作量。
理念是微不足道的,我有几个想法,但它似乎已经存在的最佳解决方案似乎是一些经典问题。
我只是不知道它叫什么。
有人知道吗?
谢谢!
编辑: 好的,对不起,我省略了很多信息。我正在开发MPI实现。标准主从系统。一个主节点检查目标目录,拾取需要处理的文件,然后将文件分配给从属MPI任务,以便它们可以并行执行。
从属节点的数量小于32 目标文件的数量小于10000.
答案 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)。这可以通过“第一次拟合”和“最佳拟合”算法启发式解决(参见链接)。