我有[; N;]工作单位,[; w_n;],实际上是令人尴尬的可并行化。每个都花费大约给定的时间长度,[; t_n;],我们事先知道。
鉴于我需要处理工作单元的某些子集,并且我可以使用最多[; P;]进程的约束,每个处理在不同的CPU上,我如何有效地分配工作单元,事先,过程是否所有过程尽可能彼此接近(及时)?
答案 0 :(得分:2)
A)如果他们的统计持续时间相同,并且你无法控制其中任何一个人的持续时间,我猜你平均可以做得比#34;完成工作单元的处理器,接收任何未完成的工作单元并执行它直到完成#34;。您的平均运行时间将为Sum(1..N,t_n)/ P。
B)如果他们有一些可预测的时间,我很想让每个过程选择时间最长的剩余工作单位,然后运行。这首先运行所有昂贵的工作,留下许多小工作来回填剩余的时间。
C)如果您坚持预先选择的静态计划,请离线运行算法B) 并预先分配工作单元以进行处理。与动态时间表相比,这可能会给你更长的总运行时间,这可以在一定程度上考虑实际的变化。