假设你有4个计算任务A,B,C,D。有些依赖(以下写成->
)作为先决条件。例如。 B ->
A意味着我必须首先计算A才能开始计算B.
依赖关系如下面的树所示,因此D ->
B ->
A和C ->
A
A
|\
B C
|
D
如果我决定在一台机器上进行所有计算,总计算时间将是(假设每台机器只有一个核心/线程):
Total time = t(A) + t(B) + t(C) + t(D)
我也可以将它们分成两台机器:
Machine1 Machine2
A A
| |
B C
|
D
在这种情况下,总时间会更短(我忽略了拆分计算所涉及的开销):
Total time = Max(t(A) + t(B) + t(D), t(A) + t(C))
请注意,在这种情况下,A必须计算两次,每台计算机一次。因此,虽然我们缩短了总时间,但却浪费了计算资源。
如果我们不与使用相同群集的其他用户竞争,那么拆分总是好的。因此,根据负载,拆分可能是一个好主意,也可能不是。
我正在寻找两种算法: